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

module Data.Aviation.Casr.Logbook.Types.SimulatorFlight(
  SimulatorFlight(..)
, HasSimulatorFlight(..)
, dayonlysimulator
) where

import Control.Category((.))
import Control.Lens(makeClassy)
import Data.Aviation.Casr.Logbook.Types.Time(Time, HasTime(time), dayonly)
import Data.Aviation.Casr.Logbook.Types.Aviator(Aviator)
import Data.Aviation.Casr.Logbook.Types.TimeAmount(TimeAmount)
import Data.Eq(Eq)
import Data.Ord(Ord)
import Data.String(String)
import Data.Time(Day)
import Prelude(Show)

data SimulatorFlight =
  SimulatorFlight {
    SimulatorFlight -> String
_simulatorflightname :: String
  , SimulatorFlight -> Time
_simulatorflighttime :: Time
  , SimulatorFlight -> String
_simulatortype :: String
  , SimulatorFlight -> [Aviator]
_simulatorothercrew :: [Aviator]
  , SimulatorFlight -> TimeAmount
_simulatorTime :: TimeAmount
  , SimulatorFlight -> TimeAmount
_instrumentsimulatorTime :: TimeAmount
  } deriving (SimulatorFlight -> SimulatorFlight -> Bool
(SimulatorFlight -> SimulatorFlight -> Bool)
-> (SimulatorFlight -> SimulatorFlight -> Bool)
-> Eq SimulatorFlight
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: SimulatorFlight -> SimulatorFlight -> Bool
== :: SimulatorFlight -> SimulatorFlight -> Bool
$c/= :: SimulatorFlight -> SimulatorFlight -> Bool
/= :: SimulatorFlight -> SimulatorFlight -> Bool
Eq, Eq SimulatorFlight
Eq SimulatorFlight =>
(SimulatorFlight -> SimulatorFlight -> Ordering)
-> (SimulatorFlight -> SimulatorFlight -> Bool)
-> (SimulatorFlight -> SimulatorFlight -> Bool)
-> (SimulatorFlight -> SimulatorFlight -> Bool)
-> (SimulatorFlight -> SimulatorFlight -> Bool)
-> (SimulatorFlight -> SimulatorFlight -> SimulatorFlight)
-> (SimulatorFlight -> SimulatorFlight -> SimulatorFlight)
-> Ord SimulatorFlight
SimulatorFlight -> SimulatorFlight -> Bool
SimulatorFlight -> SimulatorFlight -> Ordering
SimulatorFlight -> SimulatorFlight -> SimulatorFlight
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 :: SimulatorFlight -> SimulatorFlight -> Ordering
compare :: SimulatorFlight -> SimulatorFlight -> Ordering
$c< :: SimulatorFlight -> SimulatorFlight -> Bool
< :: SimulatorFlight -> SimulatorFlight -> Bool
$c<= :: SimulatorFlight -> SimulatorFlight -> Bool
<= :: SimulatorFlight -> SimulatorFlight -> Bool
$c> :: SimulatorFlight -> SimulatorFlight -> Bool
> :: SimulatorFlight -> SimulatorFlight -> Bool
$c>= :: SimulatorFlight -> SimulatorFlight -> Bool
>= :: SimulatorFlight -> SimulatorFlight -> Bool
$cmax :: SimulatorFlight -> SimulatorFlight -> SimulatorFlight
max :: SimulatorFlight -> SimulatorFlight -> SimulatorFlight
$cmin :: SimulatorFlight -> SimulatorFlight -> SimulatorFlight
min :: SimulatorFlight -> SimulatorFlight -> SimulatorFlight
Ord, Int -> SimulatorFlight -> ShowS
[SimulatorFlight] -> ShowS
SimulatorFlight -> String
(Int -> SimulatorFlight -> ShowS)
-> (SimulatorFlight -> String)
-> ([SimulatorFlight] -> ShowS)
-> Show SimulatorFlight
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> SimulatorFlight -> ShowS
showsPrec :: Int -> SimulatorFlight -> ShowS
$cshow :: SimulatorFlight -> String
show :: SimulatorFlight -> String
$cshowList :: [SimulatorFlight] -> ShowS
showList :: [SimulatorFlight] -> ShowS
Show)

makeClassy ''SimulatorFlight

instance HasTime SimulatorFlight where
  time :: Lens' SimulatorFlight Time
time =
    (Time -> f Time) -> SimulatorFlight -> f SimulatorFlight
forall c. HasSimulatorFlight c => Lens' c Time
Lens' SimulatorFlight Time
simulatorflighttime ((Time -> f Time) -> SimulatorFlight -> f SimulatorFlight)
-> ((Time -> f Time) -> Time -> f Time)
-> (Time -> f Time)
-> SimulatorFlight
-> f SimulatorFlight
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. (Time -> f Time) -> Time -> f Time
forall c. HasTime c => Lens' c Time
Lens' Time Time
time

dayonlysimulator ::
  String
  -> Day
  -> String
  -> [Aviator]
  -> TimeAmount
  -> TimeAmount
  -> SimulatorFlight
dayonlysimulator :: String
-> Day
-> String
-> [Aviator]
-> TimeAmount
-> TimeAmount
-> SimulatorFlight
dayonlysimulator String
n Day
d =
  String
-> Time
-> String
-> [Aviator]
-> TimeAmount
-> TimeAmount
-> SimulatorFlight
SimulatorFlight
    String
n
    (Day -> Time
dayonly Day
d)