{-# OPTIONS_GHC -Wall #-}
{-# LANGUAGE TemplateHaskell #-}

module Data.Aviation.Casr.Logbook.Meta.AircraftFlightMeta(
  AircraftFlightMeta(AircraftFlightMeta)
, HasAircraftFlightMeta(..)
) where

import Control.Lens(makeClassy)
import Data.Aviation.Casr.Logbook.Meta.AircraftFlightExpense
import Data.Aviation.Casr.Logbook.Meta.Image
import Data.Aviation.Casr.Logbook.Meta.Passenger
import Data.Aviation.Casr.Logbook.Meta.TrackLog
import Data.Aviation.Casr.Logbook.Meta.Video
import Data.Aviation.Casr.Logbook.Meta.Visualisation
import Data.Eq(Eq)
import Data.Ord(Ord)
import Prelude(Show)
import Data.Monoid
import Data.Semigroup

data AircraftFlightMeta =
  AircraftFlightMeta {
    AircraftFlightMeta -> [TrackLog]
_tracklogs :: [TrackLog]
  , AircraftFlightMeta -> [Visualisation]
_visualisations :: [Visualisation]
  , AircraftFlightMeta -> [Image]
_images :: [Image]
  , AircraftFlightMeta -> [Video]
_videos :: [Video]
  , AircraftFlightMeta -> [AircraftFlightExpense]
_expenses :: [AircraftFlightExpense]
  , AircraftFlightMeta -> [Passenger]
_pax :: [Passenger]
  } deriving (AircraftFlightMeta -> AircraftFlightMeta -> Bool
(AircraftFlightMeta -> AircraftFlightMeta -> Bool)
-> (AircraftFlightMeta -> AircraftFlightMeta -> Bool)
-> Eq AircraftFlightMeta
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: AircraftFlightMeta -> AircraftFlightMeta -> Bool
== :: AircraftFlightMeta -> AircraftFlightMeta -> Bool
$c/= :: AircraftFlightMeta -> AircraftFlightMeta -> Bool
/= :: AircraftFlightMeta -> AircraftFlightMeta -> Bool
Eq, Eq AircraftFlightMeta
Eq AircraftFlightMeta =>
(AircraftFlightMeta -> AircraftFlightMeta -> Ordering)
-> (AircraftFlightMeta -> AircraftFlightMeta -> Bool)
-> (AircraftFlightMeta -> AircraftFlightMeta -> Bool)
-> (AircraftFlightMeta -> AircraftFlightMeta -> Bool)
-> (AircraftFlightMeta -> AircraftFlightMeta -> Bool)
-> (AircraftFlightMeta -> AircraftFlightMeta -> AircraftFlightMeta)
-> (AircraftFlightMeta -> AircraftFlightMeta -> AircraftFlightMeta)
-> Ord AircraftFlightMeta
AircraftFlightMeta -> AircraftFlightMeta -> Bool
AircraftFlightMeta -> AircraftFlightMeta -> Ordering
AircraftFlightMeta -> AircraftFlightMeta -> AircraftFlightMeta
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: AircraftFlightMeta -> AircraftFlightMeta -> Ordering
compare :: AircraftFlightMeta -> AircraftFlightMeta -> Ordering
$c< :: AircraftFlightMeta -> AircraftFlightMeta -> Bool
< :: AircraftFlightMeta -> AircraftFlightMeta -> Bool
$c<= :: AircraftFlightMeta -> AircraftFlightMeta -> Bool
<= :: AircraftFlightMeta -> AircraftFlightMeta -> Bool
$c> :: AircraftFlightMeta -> AircraftFlightMeta -> Bool
> :: AircraftFlightMeta -> AircraftFlightMeta -> Bool
$c>= :: AircraftFlightMeta -> AircraftFlightMeta -> Bool
>= :: AircraftFlightMeta -> AircraftFlightMeta -> Bool
$cmax :: AircraftFlightMeta -> AircraftFlightMeta -> AircraftFlightMeta
max :: AircraftFlightMeta -> AircraftFlightMeta -> AircraftFlightMeta
$cmin :: AircraftFlightMeta -> AircraftFlightMeta -> AircraftFlightMeta
min :: AircraftFlightMeta -> AircraftFlightMeta -> AircraftFlightMeta
Ord, Int -> AircraftFlightMeta -> ShowS
[AircraftFlightMeta] -> ShowS
AircraftFlightMeta -> String
(Int -> AircraftFlightMeta -> ShowS)
-> (AircraftFlightMeta -> String)
-> ([AircraftFlightMeta] -> ShowS)
-> Show AircraftFlightMeta
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> AircraftFlightMeta -> ShowS
showsPrec :: Int -> AircraftFlightMeta -> ShowS
$cshow :: AircraftFlightMeta -> String
show :: AircraftFlightMeta -> String
$cshowList :: [AircraftFlightMeta] -> ShowS
showList :: [AircraftFlightMeta] -> ShowS
Show)

makeClassy '' AircraftFlightMeta

instance Semigroup AircraftFlightMeta where
  AircraftFlightMeta [TrackLog]
t1 [Visualisation]
s1 [Image]
i1 [Video]
v1 [AircraftFlightExpense]
e1 [Passenger]
p1 <> :: AircraftFlightMeta -> AircraftFlightMeta -> AircraftFlightMeta
<> AircraftFlightMeta [TrackLog]
t2 [Visualisation]
s2 [Image]
i2 [Video]
v2 [AircraftFlightExpense]
e2 [Passenger]
p2 =
    [TrackLog]
-> [Visualisation]
-> [Image]
-> [Video]
-> [AircraftFlightExpense]
-> [Passenger]
-> AircraftFlightMeta
AircraftFlightMeta ([TrackLog]
t1 [TrackLog] -> [TrackLog] -> [TrackLog]
forall a. Semigroup a => a -> a -> a
<> [TrackLog]
t2) ([Visualisation]
s1 [Visualisation] -> [Visualisation] -> [Visualisation]
forall a. Semigroup a => a -> a -> a
<> [Visualisation]
s2) ([Image]
i1 [Image] -> [Image] -> [Image]
forall a. Semigroup a => a -> a -> a
<> [Image]
i2) ([Video]
v1 [Video] -> [Video] -> [Video]
forall a. Semigroup a => a -> a -> a
<> [Video]
v2) ([AircraftFlightExpense]
e1 [AircraftFlightExpense]
-> [AircraftFlightExpense] -> [AircraftFlightExpense]
forall a. Semigroup a => a -> a -> a
<> [AircraftFlightExpense]
e2) ([Passenger]
p1 [Passenger] -> [Passenger] -> [Passenger]
forall a. Semigroup a => a -> a -> a
<> [Passenger]
p2)

instance Monoid AircraftFlightMeta where
  mempty :: AircraftFlightMeta
mempty =
    [TrackLog]
-> [Visualisation]
-> [Image]
-> [Video]
-> [AircraftFlightExpense]
-> [Passenger]
-> AircraftFlightMeta
AircraftFlightMeta [TrackLog]
forall a. Monoid a => a
mempty [Visualisation]
forall a. Monoid a => a
mempty [Image]
forall a. Monoid a => a
mempty [Video]
forall a. Monoid a => a
mempty [AircraftFlightExpense]
forall a. Monoid a => a
mempty [Passenger]
forall a. Monoid a => a
mempty