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

module Data.Aviation.Casr.Logbook.Types.Briefing(
  Briefing(..)
, HasBriefing(..)
) where

import Control.Category((.))
import Control.Lens(makeClassy)
import Data.Aviation.Casr.Logbook.Types.Aviator(Aviator, HasAviator(aviator))
import Data.Aviation.Casr.Logbook.Types.Location(Location, HasLocation(location))
import Data.Aviation.Casr.Logbook.Types.Time(Time, HasTime(time))
import Data.Aviation.Casr.Logbook.Types.TimeAmount(TimeAmount, HasTimeAmount(timeAmount))
import Data.Eq(Eq)
import Data.Ord(Ord)
import Data.String(String)
import Prelude(Show)

data Briefing =
  Briefing {
    _briefingName :: String
  , _briefingLocation :: Location
  , _briefingTime :: Time
  , _briefer :: Aviator
  , _briefingTimeAmount :: TimeAmount
  } deriving (Eq, Ord, Show)

makeClassy ''Briefing

instance HasLocation Briefing where
  location =
    briefingLocation . location

instance HasTime Briefing where
  time =
    briefingTime .  time

instance HasAviator Briefing where
  aviator =
    briefer . aviator

instance HasTimeAmount Briefing where
  timeAmount =
    briefingTimeAmount . timeAmount