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

module Data.Aviation.Casr.Logbook.Meta.AircraftUsageExpense(
  AircraftUsageExpense(AircraftUsageExpense)
, HasAircraftUsageExpense(..)
, aircraftUsageCost
) where

import Control.Lens(makeClassy, (^.))
import Data.Aviation.Casr.Logbook.Types.AircraftFlight(HasAircraftFlight, daynight)
import Data.Aviation.Casr.Logbook.Types.TimeAmount(timeAmountBy10)
import Data.Aviation.Casr.Logbook.Types.DayNight(totalDayNight)
import Data.Eq(Eq)
import Data.Int(Int)
import Data.Ord(Ord)
import Data.String(String)
import Prelude(Show, (*))

data AircraftUsageExpense =
  AircraftUsageExpense {
    AircraftUsageExpense -> Int
_aircraftusageexpenseperhour :: Int
  , AircraftUsageExpense -> String
_aircraftusageexpensename :: String
  } deriving (AircraftUsageExpense -> AircraftUsageExpense -> Bool
(AircraftUsageExpense -> AircraftUsageExpense -> Bool)
-> (AircraftUsageExpense -> AircraftUsageExpense -> Bool)
-> Eq AircraftUsageExpense
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: AircraftUsageExpense -> AircraftUsageExpense -> Bool
== :: AircraftUsageExpense -> AircraftUsageExpense -> Bool
$c/= :: AircraftUsageExpense -> AircraftUsageExpense -> Bool
/= :: AircraftUsageExpense -> AircraftUsageExpense -> Bool
Eq, Eq AircraftUsageExpense
Eq AircraftUsageExpense =>
(AircraftUsageExpense -> AircraftUsageExpense -> Ordering)
-> (AircraftUsageExpense -> AircraftUsageExpense -> Bool)
-> (AircraftUsageExpense -> AircraftUsageExpense -> Bool)
-> (AircraftUsageExpense -> AircraftUsageExpense -> Bool)
-> (AircraftUsageExpense -> AircraftUsageExpense -> Bool)
-> (AircraftUsageExpense
    -> AircraftUsageExpense -> AircraftUsageExpense)
-> (AircraftUsageExpense
    -> AircraftUsageExpense -> AircraftUsageExpense)
-> Ord AircraftUsageExpense
AircraftUsageExpense -> AircraftUsageExpense -> Bool
AircraftUsageExpense -> AircraftUsageExpense -> Ordering
AircraftUsageExpense
-> AircraftUsageExpense -> AircraftUsageExpense
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 :: AircraftUsageExpense -> AircraftUsageExpense -> Ordering
compare :: AircraftUsageExpense -> AircraftUsageExpense -> Ordering
$c< :: AircraftUsageExpense -> AircraftUsageExpense -> Bool
< :: AircraftUsageExpense -> AircraftUsageExpense -> Bool
$c<= :: AircraftUsageExpense -> AircraftUsageExpense -> Bool
<= :: AircraftUsageExpense -> AircraftUsageExpense -> Bool
$c> :: AircraftUsageExpense -> AircraftUsageExpense -> Bool
> :: AircraftUsageExpense -> AircraftUsageExpense -> Bool
$c>= :: AircraftUsageExpense -> AircraftUsageExpense -> Bool
>= :: AircraftUsageExpense -> AircraftUsageExpense -> Bool
$cmax :: AircraftUsageExpense
-> AircraftUsageExpense -> AircraftUsageExpense
max :: AircraftUsageExpense
-> AircraftUsageExpense -> AircraftUsageExpense
$cmin :: AircraftUsageExpense
-> AircraftUsageExpense -> AircraftUsageExpense
min :: AircraftUsageExpense
-> AircraftUsageExpense -> AircraftUsageExpense
Ord, Int -> AircraftUsageExpense -> ShowS
[AircraftUsageExpense] -> ShowS
AircraftUsageExpense -> String
(Int -> AircraftUsageExpense -> ShowS)
-> (AircraftUsageExpense -> String)
-> ([AircraftUsageExpense] -> ShowS)
-> Show AircraftUsageExpense
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> AircraftUsageExpense -> ShowS
showsPrec :: Int -> AircraftUsageExpense -> ShowS
$cshow :: AircraftUsageExpense -> String
show :: AircraftUsageExpense -> String
$cshowList :: [AircraftUsageExpense] -> ShowS
showList :: [AircraftUsageExpense] -> ShowS
Show)

makeClassy ''AircraftUsageExpense

aircraftUsageCost ::
  HasAircraftFlight s =>
  s
  -> AircraftUsageExpense
  -> Int
aircraftUsageCost :: forall s. HasAircraftFlight s => s -> AircraftUsageExpense -> Int
aircraftUsageCost s
fl (AircraftUsageExpense Int
perhour String
_) =
  let z :: TimeAmount
z = DayNight -> TimeAmount
totalDayNight (s
fl s -> Getting DayNight s DayNight -> DayNight
forall s a. s -> Getting a s a -> a
^. Getting DayNight s DayNight
forall c. HasAircraftFlight c => Lens' c DayNight
Lens' s DayNight
daynight)
  in  TimeAmount -> Int
timeAmountBy10 TimeAmount
z Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
perhour