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

module Data.Aviation.Casr.Logbook.Meta.SimulatorFlightExpense(
  SimulatorFlightExpense(SimulatorFlightExpense)
, HasSimulatorFlightExpense(..)
, simulatorFlightCost
) where

import Control.Lens(makeClassy, (^.))
import Data.Aviation.Casr.Logbook.Types.SimulatorFlight(HasSimulatorFlight, instrumentsimulatorTime)
import Data.Aviation.Casr.Logbook.Types.TimeAmount(timeAmountBy10)
import Data.Eq(Eq)
import Data.Int(Int)
import Data.Ord(Ord)
import Data.String(String)
import Prelude(Show, (*))

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

makeClassy ''SimulatorFlightExpense

simulatorFlightCost ::
  HasSimulatorFlight s =>
  s
  -> SimulatorFlightExpense
  -> Int
simulatorFlightCost :: forall s.
HasSimulatorFlight s =>
s -> SimulatorFlightExpense -> Int
simulatorFlightCost s
sf (SimulatorFlightExpense Int
perhour String
_) =
  let z :: TimeAmount
z = s
sf s -> Getting TimeAmount s TimeAmount -> TimeAmount
forall s a. s -> Getting a s a -> a
^. Getting TimeAmount s TimeAmount
forall c. HasSimulatorFlight c => Lens' c TimeAmount
Lens' s TimeAmount
instrumentsimulatorTime
  in  TimeAmount -> Int
timeAmountBy10 TimeAmount
z Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
perhour