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

module Data.Aviation.Casr.Logbook.Types.DayNight(
  DayNight(..)
, HasDayNight(..)
, day
, night
, totalDayNight
) where

import Control.Lens(makeClassy)
import Data.Aviation.Casr.Logbook.Types.TimeAmount(TimeAmount(TimeAmount), zerotimeamount)
import Data.Digit(DecDigit)
import Data.Eq(Eq)
import Data.Int(Int)
import Data.Monoid(mappend)
import Data.Ord(Ord)
import Prelude(Show)

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

makeClassy ''DayNight

day ::
  Int
  -> DecDigit
  -> DayNight
day :: Int -> DecDigit -> DayNight
day Int
h DecDigit
p =
  TimeAmount -> TimeAmount -> DayNight
DayNight (Int -> DecDigit -> TimeAmount
TimeAmount Int
h DecDigit
p) TimeAmount
zerotimeamount

night ::
  Int
  -> DecDigit
  -> DayNight
night :: Int -> DecDigit -> DayNight
night Int
h DecDigit
p =
  TimeAmount -> TimeAmount -> DayNight
DayNight TimeAmount
zerotimeamount (Int -> DecDigit -> TimeAmount
TimeAmount Int
h DecDigit
p)

totalDayNight ::
  DayNight
  -> TimeAmount
totalDayNight :: DayNight -> TimeAmount
totalDayNight (DayNight TimeAmount
d TimeAmount
n) =
  TimeAmount
d TimeAmount -> TimeAmount -> TimeAmount
forall a. Monoid a => a -> a -> a
`mappend` TimeAmount
n