module Telescope.Fits.Header.Keyword where

import Data.Text (Text)
import Data.Text qualified as T
import Telescope.Fits.Header.Value


{- | A single 80 character header keyword line of the form: KEYWORD = VALUE / comment
    KEYWORD=VALUE
-}
data KeywordRecord = KeywordRecord
  { KeywordRecord -> Text
keyword :: Text
  , KeywordRecord -> Value
value :: Value
  , KeywordRecord -> Maybe Text
comment :: Maybe Text
  }
  deriving (Int -> KeywordRecord -> ShowS
[KeywordRecord] -> ShowS
KeywordRecord -> String
(Int -> KeywordRecord -> ShowS)
-> (KeywordRecord -> String)
-> ([KeywordRecord] -> ShowS)
-> Show KeywordRecord
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> KeywordRecord -> ShowS
showsPrec :: Int -> KeywordRecord -> ShowS
$cshow :: KeywordRecord -> String
show :: KeywordRecord -> String
$cshowList :: [KeywordRecord] -> ShowS
showList :: [KeywordRecord] -> ShowS
Show, KeywordRecord -> KeywordRecord -> Bool
(KeywordRecord -> KeywordRecord -> Bool)
-> (KeywordRecord -> KeywordRecord -> Bool) -> Eq KeywordRecord
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: KeywordRecord -> KeywordRecord -> Bool
== :: KeywordRecord -> KeywordRecord -> Bool
$c/= :: KeywordRecord -> KeywordRecord -> Bool
/= :: KeywordRecord -> KeywordRecord -> Bool
Eq)


isKeyword :: Text -> KeywordRecord -> Bool
isKeyword :: Text -> KeywordRecord -> Bool
isKeyword Text
k (KeywordRecord Text
k2 Value
_ Maybe Text
_) = Text -> Text
T.toLower Text
k Text -> Text -> Bool
forall a. Eq a => a -> a -> Bool
== Text -> Text
T.toLower Text
k2


-- | Set the comment of a KeywordRecrod
addComment :: Text -> KeywordRecord -> KeywordRecord
addComment :: Text -> KeywordRecord -> KeywordRecord
addComment Text
c KeywordRecord
kr = KeywordRecord
kr{comment = Just c}