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

module Data.Aviation.Casr.Logbook.Meta.BriefingExpense(
  BriefingExpense(BriefingExpense)
, HasBriefingExpense(..)
, briefingCost
) where

import Control.Lens(makeClassy, (^.))
import Data.Aviation.Casr.Logbook.Types.Briefing(HasBriefing, briefingTimeAmount)
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 BriefingExpense =
  BriefingExpense {
    BriefingExpense -> Int
_briefingexpenseperhour :: Int
  , BriefingExpense -> String
_briefingexpensename :: String
  } deriving (BriefingExpense -> BriefingExpense -> Bool
(BriefingExpense -> BriefingExpense -> Bool)
-> (BriefingExpense -> BriefingExpense -> Bool)
-> Eq BriefingExpense
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: BriefingExpense -> BriefingExpense -> Bool
== :: BriefingExpense -> BriefingExpense -> Bool
$c/= :: BriefingExpense -> BriefingExpense -> Bool
/= :: BriefingExpense -> BriefingExpense -> Bool
Eq, Eq BriefingExpense
Eq BriefingExpense =>
(BriefingExpense -> BriefingExpense -> Ordering)
-> (BriefingExpense -> BriefingExpense -> Bool)
-> (BriefingExpense -> BriefingExpense -> Bool)
-> (BriefingExpense -> BriefingExpense -> Bool)
-> (BriefingExpense -> BriefingExpense -> Bool)
-> (BriefingExpense -> BriefingExpense -> BriefingExpense)
-> (BriefingExpense -> BriefingExpense -> BriefingExpense)
-> Ord BriefingExpense
BriefingExpense -> BriefingExpense -> Bool
BriefingExpense -> BriefingExpense -> Ordering
BriefingExpense -> BriefingExpense -> BriefingExpense
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 :: BriefingExpense -> BriefingExpense -> Ordering
compare :: BriefingExpense -> BriefingExpense -> Ordering
$c< :: BriefingExpense -> BriefingExpense -> Bool
< :: BriefingExpense -> BriefingExpense -> Bool
$c<= :: BriefingExpense -> BriefingExpense -> Bool
<= :: BriefingExpense -> BriefingExpense -> Bool
$c> :: BriefingExpense -> BriefingExpense -> Bool
> :: BriefingExpense -> BriefingExpense -> Bool
$c>= :: BriefingExpense -> BriefingExpense -> Bool
>= :: BriefingExpense -> BriefingExpense -> Bool
$cmax :: BriefingExpense -> BriefingExpense -> BriefingExpense
max :: BriefingExpense -> BriefingExpense -> BriefingExpense
$cmin :: BriefingExpense -> BriefingExpense -> BriefingExpense
min :: BriefingExpense -> BriefingExpense -> BriefingExpense
Ord, Int -> BriefingExpense -> ShowS
[BriefingExpense] -> ShowS
BriefingExpense -> String
(Int -> BriefingExpense -> ShowS)
-> (BriefingExpense -> String)
-> ([BriefingExpense] -> ShowS)
-> Show BriefingExpense
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> BriefingExpense -> ShowS
showsPrec :: Int -> BriefingExpense -> ShowS
$cshow :: BriefingExpense -> String
show :: BriefingExpense -> String
$cshowList :: [BriefingExpense] -> ShowS
showList :: [BriefingExpense] -> ShowS
Show)

makeClassy ''BriefingExpense

briefingCost ::
  HasBriefing s =>
  s
  -> BriefingExpense
  -> Int
briefingCost :: forall s. HasBriefing s => s -> BriefingExpense -> Int
briefingCost s
br (BriefingExpense Int
perhour String
_) =
  let z :: TimeAmount
z = s
br s -> Getting TimeAmount s TimeAmount -> TimeAmount
forall s a. s -> Getting a s a -> a
^. Getting TimeAmount s TimeAmount
forall c. HasBriefing c => Lens' c TimeAmount
Lens' s TimeAmount
briefingTimeAmount
  in  TimeAmount -> Int
timeAmountBy10 TimeAmount
z Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
perhour