{-# OPTIONS_GHC -Wall #-}
{-# LANGUAGE OverloadedStrings #-}

module Data.Aviation.Casr.Logbook.Reports.Meta.Html(
  htmlExpenseReport
, htmlReports
) where

import Control.Category((.))
import Data.Aviation.Casr.Logbook.Reports(getFlightTimeReport, getSimulatorTimeReport)
import Data.Aviation.Casr.Logbook.Reports.Html(htmlFlightTimeReport, htmlSimulatorTimeReport, htmlTakeOffLanding90, takeoffslandings90)
import Data.Aviation.Casr.Logbook.Reports.Meta(ExpenseReport(ExpenseReport), logbookExpenseReport)
import Data.Aviation.Casr.Logbook.Meta(AircraftFlightMeta, SimulatorFlightMeta, ExamMeta, BriefingMeta)
import Data.Aviation.Casr.Logbook.Meta.Html(showThousandCentsAsDollars, showHundredCentsAsDollars)
import Data.Aviation.Casr.Logbook.Types(Logbook)
import Data.Function(($))
import Data.String(fromString)
import qualified Data.Text as Text(pack)
import Lucid(
    hr_
  , class_
  , ul_
  , li_
  , span_
  , h3_
  , div_
  , a_
  , id_
  , href_
  , Html
  )
import Prelude((+))

htmlExpenseReport ::
  Logbook AircraftFlightMeta SimulatorFlightMeta ExamMeta BriefingMeta
  -> ExpenseReport
  -> Html ()
htmlExpenseReport :: Logbook
  AircraftFlightMeta SimulatorFlightMeta ExamMeta BriefingMeta
-> ExpenseReport -> HtmlT Identity ()
htmlExpenseReport Logbook
  AircraftFlightMeta SimulatorFlightMeta ExamMeta BriefingMeta
_ (ExpenseReport Int
ag Int
al Int
b Int
e Int
s) =
  [Attribute] -> HtmlT Identity () -> HtmlT Identity ()
forall arg result. Term arg result => arg -> result
div_ [Text -> Attribute
class_ Text
"expensereport"] (HtmlT Identity () -> HtmlT Identity ())
-> HtmlT Identity () -> HtmlT Identity ()
forall a b. (a -> b) -> a -> b
$
    do  [Attribute] -> HtmlT Identity () -> HtmlT Identity ()
forall arg result. Term arg result => arg -> result
a_ [Text -> Attribute
id_ Text
"RPT_Expense"] HtmlT Identity ()
""
        [Attribute] -> HtmlT Identity () -> HtmlT Identity ()
forall arg result. Term arg result => arg -> result
a_ [Text -> Attribute
href_ (String -> Text
Text.pack String
"#RPT_Expense")] (HtmlT Identity () -> HtmlT Identity ())
-> (HtmlT Identity () -> HtmlT Identity ())
-> HtmlT Identity ()
-> HtmlT Identity ()
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
. [Attribute] -> HtmlT Identity () -> HtmlT Identity ()
forall arg result. Term arg result => arg -> result
span_ [Text -> Attribute
class_ Text
"entrytag"] (HtmlT Identity () -> HtmlT Identity ())
-> HtmlT Identity () -> HtmlT Identity ()
forall a b. (a -> b) -> a -> b
$ HtmlT Identity ()
"RPT"
        [Attribute] -> HtmlT Identity () -> HtmlT Identity ()
forall arg result. Term arg result => arg -> result
h3_ [Text -> Attribute
class_ Text
"expensereportname"] HtmlT Identity ()
"Expense Report"
        do  [Attribute] -> HtmlT Identity () -> HtmlT Identity ()
forall arg result. Term arg result => arg -> result
ul_ [] (HtmlT Identity () -> HtmlT Identity ())
-> HtmlT Identity () -> HtmlT Identity ()
forall a b. (a -> b) -> a -> b
$
              do  [Attribute] -> HtmlT Identity () -> HtmlT Identity ()
forall arg result. Term arg result => arg -> result
li_ [] (HtmlT Identity () -> HtmlT Identity ())
-> HtmlT Identity () -> HtmlT Identity ()
forall a b. (a -> b) -> a -> b
$
                    do  [Attribute] -> HtmlT Identity () -> HtmlT Identity ()
forall arg result. Term arg result => arg -> result
span_ [Text -> Attribute
class_ Text
"key"] HtmlT Identity ()
"Aircraft: "
                        [Attribute] -> HtmlT Identity () -> HtmlT Identity ()
forall arg result. Term arg result => arg -> result
span_ [Text -> Attribute
class_ Text
"value"] (HtmlT Identity () -> HtmlT Identity ())
-> (Int -> HtmlT Identity ()) -> Int -> HtmlT Identity ()
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
. String -> HtmlT Identity ()
forall a. IsString a => String -> a
fromString (String -> HtmlT Identity ())
-> (Int -> String) -> Int -> HtmlT Identity ()
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
. (Char
'$'Char -> String -> String
forall a. a -> [a] -> [a]
:) (String -> String) -> (Int -> String) -> Int -> String
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
. Int -> String
showThousandCentsAsDollars (Int -> HtmlT Identity ()) -> Int -> HtmlT Identity ()
forall a b. (a -> b) -> a -> b
$ Int
ag Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
al
                        [Attribute] -> HtmlT Identity () -> HtmlT Identity ()
forall arg result. Term arg result => arg -> result
ul_ [] (HtmlT Identity () -> HtmlT Identity ())
-> HtmlT Identity () -> HtmlT Identity ()
forall a b. (a -> b) -> a -> b
$
                          do  [Attribute] -> HtmlT Identity () -> HtmlT Identity ()
forall arg result. Term arg result => arg -> result
li_ [] (HtmlT Identity () -> HtmlT Identity ())
-> HtmlT Identity () -> HtmlT Identity ()
forall a b. (a -> b) -> a -> b
$
                                do  [Attribute] -> HtmlT Identity () -> HtmlT Identity ()
forall arg result. Term arg result => arg -> result
span_ [Text -> Attribute
class_ Text
"key"] HtmlT Identity ()
"Usage: "
                                    [Attribute] -> HtmlT Identity () -> HtmlT Identity ()
forall arg result. Term arg result => arg -> result
span_ [Text -> Attribute
class_ Text
"value"] (HtmlT Identity () -> HtmlT Identity ())
-> (Int -> HtmlT Identity ()) -> Int -> HtmlT Identity ()
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
. String -> HtmlT Identity ()
forall a. IsString a => String -> a
fromString (String -> HtmlT Identity ())
-> (Int -> String) -> Int -> HtmlT Identity ()
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
. (Char
'$'Char -> String -> String
forall a. a -> [a] -> [a]
:) (String -> String) -> (Int -> String) -> Int -> String
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
. Int -> String
showThousandCentsAsDollars (Int -> HtmlT Identity ()) -> Int -> HtmlT Identity ()
forall a b. (a -> b) -> a -> b
$ Int
ag
                              [Attribute] -> HtmlT Identity () -> HtmlT Identity ()
forall arg result. Term arg result => arg -> result
li_ [] (HtmlT Identity () -> HtmlT Identity ())
-> HtmlT Identity () -> HtmlT Identity ()
forall a b. (a -> b) -> a -> b
$
                                do  [Attribute] -> HtmlT Identity () -> HtmlT Identity ()
forall arg result. Term arg result => arg -> result
span_ [Text -> Attribute
class_ Text
"key"] HtmlT Identity ()
"Landing: "
                                    [Attribute] -> HtmlT Identity () -> HtmlT Identity ()
forall arg result. Term arg result => arg -> result
span_ [Text -> Attribute
class_ Text
"value"] (HtmlT Identity () -> HtmlT Identity ())
-> (Int -> HtmlT Identity ()) -> Int -> HtmlT Identity ()
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
. String -> HtmlT Identity ()
forall a. IsString a => String -> a
fromString (String -> HtmlT Identity ())
-> (Int -> String) -> Int -> HtmlT Identity ()
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
. (Char
'$'Char -> String -> String
forall a. a -> [a] -> [a]
:) (String -> String) -> (Int -> String) -> Int -> String
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
. Int -> String
showHundredCentsAsDollars (Int -> HtmlT Identity ()) -> Int -> HtmlT Identity ()
forall a b. (a -> b) -> a -> b
$ Int
al
                  [Attribute] -> HtmlT Identity () -> HtmlT Identity ()
forall arg result. Term arg result => arg -> result
li_ [] (HtmlT Identity () -> HtmlT Identity ())
-> HtmlT Identity () -> HtmlT Identity ()
forall a b. (a -> b) -> a -> b
$
                    do  [Attribute] -> HtmlT Identity () -> HtmlT Identity ()
forall arg result. Term arg result => arg -> result
span_ [Text -> Attribute
class_ Text
"key"] HtmlT Identity ()
"Briefing: "
                        [Attribute] -> HtmlT Identity () -> HtmlT Identity ()
forall arg result. Term arg result => arg -> result
span_ [Text -> Attribute
class_ Text
"value"] (HtmlT Identity () -> HtmlT Identity ())
-> (Int -> HtmlT Identity ()) -> Int -> HtmlT Identity ()
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
. String -> HtmlT Identity ()
forall a. IsString a => String -> a
fromString (String -> HtmlT Identity ())
-> (Int -> String) -> Int -> HtmlT Identity ()
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
. (Char
'$'Char -> String -> String
forall a. a -> [a] -> [a]
:) (String -> String) -> (Int -> String) -> Int -> String
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
. Int -> String
showThousandCentsAsDollars (Int -> HtmlT Identity ()) -> Int -> HtmlT Identity ()
forall a b. (a -> b) -> a -> b
$ Int
b
                  [Attribute] -> HtmlT Identity () -> HtmlT Identity ()
forall arg result. Term arg result => arg -> result
li_ [] (HtmlT Identity () -> HtmlT Identity ())
-> HtmlT Identity () -> HtmlT Identity ()
forall a b. (a -> b) -> a -> b
$
                    do  [Attribute] -> HtmlT Identity () -> HtmlT Identity ()
forall arg result. Term arg result => arg -> result
span_ [Text -> Attribute
class_ Text
"key"] HtmlT Identity ()
"Exam: "
                        [Attribute] -> HtmlT Identity () -> HtmlT Identity ()
forall arg result. Term arg result => arg -> result
span_ [Text -> Attribute
class_ Text
"value"] (HtmlT Identity () -> HtmlT Identity ())
-> (Int -> HtmlT Identity ()) -> Int -> HtmlT Identity ()
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
. String -> HtmlT Identity ()
forall a. IsString a => String -> a
fromString (String -> HtmlT Identity ())
-> (Int -> String) -> Int -> HtmlT Identity ()
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
. (Char
'$'Char -> String -> String
forall a. a -> [a] -> [a]
:) (String -> String) -> (Int -> String) -> Int -> String
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
. Int -> String
showHundredCentsAsDollars (Int -> HtmlT Identity ()) -> Int -> HtmlT Identity ()
forall a b. (a -> b) -> a -> b
$ Int
e
                  [Attribute] -> HtmlT Identity () -> HtmlT Identity ()
forall arg result. Term arg result => arg -> result
li_ [] (HtmlT Identity () -> HtmlT Identity ())
-> HtmlT Identity () -> HtmlT Identity ()
forall a b. (a -> b) -> a -> b
$
                    do  [Attribute] -> HtmlT Identity () -> HtmlT Identity ()
forall arg result. Term arg result => arg -> result
span_ [Text -> Attribute
class_ Text
"key"] HtmlT Identity ()
"Simulator: "
                        [Attribute] -> HtmlT Identity () -> HtmlT Identity ()
forall arg result. Term arg result => arg -> result
span_ [Text -> Attribute
class_ Text
"value"] (HtmlT Identity () -> HtmlT Identity ())
-> (Int -> HtmlT Identity ()) -> Int -> HtmlT Identity ()
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
. String -> HtmlT Identity ()
forall a. IsString a => String -> a
fromString (String -> HtmlT Identity ())
-> (Int -> String) -> Int -> HtmlT Identity ()
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
. (Char
'$'Char -> String -> String
forall a. a -> [a] -> [a]
:) (String -> String) -> (Int -> String) -> Int -> String
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
. Int -> String
showThousandCentsAsDollars (Int -> HtmlT Identity ()) -> Int -> HtmlT Identity ()
forall a b. (a -> b) -> a -> b
$ Int
s
                  [Attribute] -> HtmlT Identity () -> HtmlT Identity ()
forall arg result. Term arg result => arg -> result
li_ [] (HtmlT Identity () -> HtmlT Identity ())
-> HtmlT Identity () -> HtmlT Identity ()
forall a b. (a -> b) -> a -> b
$
                    do  [Attribute] -> HtmlT Identity () -> HtmlT Identity ()
forall arg result. Term arg result => arg -> result
span_ [Text -> Attribute
class_ Text
"key"] HtmlT Identity ()
"TOTAL: "
                        [Attribute] -> HtmlT Identity () -> HtmlT Identity ()
forall arg result. Term arg result => arg -> result
span_ [Text -> Attribute
class_ Text
"value"] (HtmlT Identity () -> HtmlT Identity ())
-> (Int -> HtmlT Identity ()) -> Int -> HtmlT Identity ()
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
. String -> HtmlT Identity ()
forall a. IsString a => String -> a
fromString (String -> HtmlT Identity ())
-> (Int -> String) -> Int -> HtmlT Identity ()
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
. (Char
'$'Char -> String -> String
forall a. a -> [a] -> [a]
:) (String -> String) -> (Int -> String) -> Int -> String
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
. Int -> String
showThousandCentsAsDollars (Int -> HtmlT Identity ()) -> Int -> HtmlT Identity ()
forall a b. (a -> b) -> a -> b
$ (Int
ag Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
al Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
b Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
e Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
s)

htmlReports ::
  Logbook AircraftFlightMeta SimulatorFlightMeta ExamMeta BriefingMeta
  -> Html ()
htmlReports :: Logbook
  AircraftFlightMeta SimulatorFlightMeta ExamMeta BriefingMeta
-> HtmlT Identity ()
htmlReports Logbook
  AircraftFlightMeta SimulatorFlightMeta ExamMeta BriefingMeta
b =
  do  Logbook
  AircraftFlightMeta SimulatorFlightMeta ExamMeta BriefingMeta
-> FlightTimeReport -> HtmlT Identity ()
forall a b c d.
Logbook a b c d -> FlightTimeReport -> HtmlT Identity ()
htmlFlightTimeReport Logbook
  AircraftFlightMeta SimulatorFlightMeta ExamMeta BriefingMeta
b (Logbook
  AircraftFlightMeta SimulatorFlightMeta ExamMeta BriefingMeta
-> FlightTimeReport
forall a b c d. Logbook a b c d -> FlightTimeReport
getFlightTimeReport Logbook
  AircraftFlightMeta SimulatorFlightMeta ExamMeta BriefingMeta
b)
      [Attribute] -> HtmlT Identity ()
forall (m :: * -> *). Applicative m => [Attribute] -> HtmlT m ()
hr_ []
      Logbook
  AircraftFlightMeta SimulatorFlightMeta ExamMeta BriefingMeta
-> SimulatorTimeReport -> HtmlT Identity ()
forall a b c d.
Logbook a b c d -> SimulatorTimeReport -> HtmlT Identity ()
htmlSimulatorTimeReport Logbook
  AircraftFlightMeta SimulatorFlightMeta ExamMeta BriefingMeta
b (Logbook
  AircraftFlightMeta SimulatorFlightMeta ExamMeta BriefingMeta
-> SimulatorTimeReport
forall a b c d. Logbook a b c d -> SimulatorTimeReport
getSimulatorTimeReport Logbook
  AircraftFlightMeta SimulatorFlightMeta ExamMeta BriefingMeta
b)
      [Attribute] -> HtmlT Identity ()
forall (m :: * -> *). Applicative m => [Attribute] -> HtmlT m ()
hr_ []
      Logbook
  AircraftFlightMeta SimulatorFlightMeta ExamMeta BriefingMeta
-> Maybe TakeOffLanding90 -> HtmlT Identity ()
forall a b c d.
Logbook a b c d -> Maybe TakeOffLanding90 -> HtmlT Identity ()
htmlTakeOffLanding90 Logbook
  AircraftFlightMeta SimulatorFlightMeta ExamMeta BriefingMeta
b (Logbook
  AircraftFlightMeta SimulatorFlightMeta ExamMeta BriefingMeta
-> Maybe TakeOffLanding90
forall a b c d. Logbook a b c d -> Maybe TakeOffLanding90
takeoffslandings90 Logbook
  AircraftFlightMeta SimulatorFlightMeta ExamMeta BriefingMeta
b)
      [Attribute] -> HtmlT Identity ()
forall (m :: * -> *). Applicative m => [Attribute] -> HtmlT m ()
hr_ []
      Logbook
  AircraftFlightMeta SimulatorFlightMeta ExamMeta BriefingMeta
-> ExpenseReport -> HtmlT Identity ()
htmlExpenseReport Logbook
  AircraftFlightMeta SimulatorFlightMeta ExamMeta BriefingMeta
b (Logbook
  AircraftFlightMeta SimulatorFlightMeta ExamMeta BriefingMeta
-> ExpenseReport
logbookExpenseReport Logbook
  AircraftFlightMeta SimulatorFlightMeta ExamMeta BriefingMeta
b)