{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE TemplateHaskell #-}

module Data.Aviation.Casr.Logbook.Types.Aviator(
  Aviator(..)
, HasAviator(..)
, aviatorwithname
, nodobaviator
, dobaviator
) where

import Control.Lens(makeClassy)
import Data.Aviation.Casr.Logbook.Types.Rating(Rating)
import Data.Eq(Eq)
import Data.Ord(Ord)
import Data.Digit(DecDigit)
import Data.Maybe(Maybe(Nothing, Just))
import Data.String(String)
import Data.Time(Day)
import Prelude(Show)

data Aviator =
  Aviator {
    _surname :: String
  , _firstname :: String
  , _arn :: [DecDigit]
  , _dob :: Maybe Day
  , _ratings :: [Rating]
  } deriving (Eq, Ord, Show)

makeClassy ''Aviator

aviatorwithname ::
  String
  -> String
  -> Aviator
aviatorwithname s f =
  Aviator
    s
    f
    []
    Nothing
    []

nodobaviator ::
  String
  -> String
  -> [DecDigit]
  -> [Rating]
  -> Aviator
nodobaviator s f r =
  Aviator
    s
    f
    r
    Nothing

dobaviator ::
  String
  -> String
  -> [DecDigit]
  -> Day
  -> [Rating]
  -> Aviator
dobaviator s f r b =
  Aviator
    s
    f
    r
    (Just b)