module Yesod.Goodies.PNotify.Modules.Reference
       ( Reference(..)
       , defaultReference
       )where

import Data.Aeson
import Data.Text (Text)

import Yesod.Goodies.PNotify.Types
import Yesod.Goodies.PNotify.Types.Instances

data Labels = Labels { _text :: Maybe Text
                     }
              deriving (Read, Show, Eq, Ord)

instance FromJSON Labels where
  parseJSON (Object v) = Labels <$>
                         v .:? "text"

instance ToJSON Labels where
  toJSON (Labels { _text
                 })
      = object $ maybe [] (\x -> ["text" .= x]) _text ++
                 []

data Reference = Reference { _putThing :: Maybe Bool
                           , _labels   :: Maybe Text
                           }
                 deriving (Read, Show, Eq, Ord)

instance FromJSON Reference where
  parseJSON (Object v) = Reference <$>
                         v .:? "putThing" <*>
                         v .:? "labels"

instance ToJSON Reference where
  toJSON (Reference { _putThing
                    , _labels
                    })
      = object $ maybe [] (\x -> ["putThing" .= x]) _putThing ++
                 maybe [] (\x -> ["labels" .= x]) _labels ++
                 []

defaultReference :: Reference
defaultReference = Reference
                   { _putThing = Nothing
                   , _labels = Nothing
                   }