module Text.Kindle.Clippings.Types 
( Clipping (..)
, Document (..)
, Position (..)
, Interval (..)
, Content  (..)
) where

import Data.Time.LocalTime (LocalTime(..), TimeOfDay(..))
import Data.Time.Calendar (fromGregorian)
import Data.Default

data Clipping = Clipping
  { document :: Document
  , position :: Position
  , date     :: LocalTime
  , content  :: Content
  } deriving (Eq)

data Document = Document 
  { title  :: String
  , author :: Maybe String -- Not always present, e.g. "Oxford Dictionary of English\n".
  } deriving (Eq)

data Interval = Singleton Int | Proper Int Int deriving (Eq)

data Position = Position
  { page     :: Maybe Interval
  , location :: Maybe Interval
  } deriving (Eq)

data Content = Bookmark | Highlight String | Annotation String

instance Eq Content where 
  Bookmark      == Bookmark       =  True
  Highlight s0  == Highlight s1   =  s0 == s1
  Annotation s0 == Annotation s1  =  s0 == s1
  _ == _                          =  False

instance Default Document where
  def = Document [] Nothing

instance Default Position where
  def = Position Nothing Nothing

instance Default LocalTime where
  def = LocalTime (fromGregorian 1970 1 1) (TimeOfDay 0 0 0)

instance Default Content where
  def = Bookmark

instance Default Clipping where
  def = Clipping def def def def