{-# LANGUAGE DeriveDataTypeable, GeneralizedNewtypeDeriving, TemplateHaskell #-}
module Clckwrks.Media.Types where

import Data.Data (Data, Typeable)
import Data.IxSet (Indexable(..), ixSet, ixFun)
import Data.SafeCopy (SafeCopy, base, deriveSafeCopy)
import Data.Text     (Text)
import Web.Routes    (PathInfo(..))

newtype MediumId = MediumId { unMediumId :: Integer }
    deriving (Eq, Ord, Read, Show, Data, Typeable, SafeCopy, PathInfo)

data MediumKind
    = JPEG
    | PNG
    | GIF
      deriving (Eq, Ord, Read, Show, Data, Typeable)
$(deriveSafeCopy 0 'base ''MediumKind)

mediumContentType :: MediumKind -> String
mediumContentType JPEG = "image/jpeg; charset=binary"
mediumContentType PNG  = "image/png; charset=binary"
mediumContentType GIF  = "image/gif; charset=binary"

data Medium
    = Medium { mediumId     :: MediumId
             , uploadName   :: FilePath
             , mediumPath   :: FilePath
             , mediumKind   :: MediumKind
             -- , fileSize    :: Integer
             }
      deriving (Eq, Ord, Read, Show, Data, Typeable)
$(deriveSafeCopy 0 'base ''Medium)

data PreviewSize
    = Tall
    | Grande
    | Venti
      deriving (Eq, Ord, Read, Show, Data, Typeable)
$(deriveSafeCopy 0 'base ''PreviewSize)

instance Indexable Medium where
    empty = ixSet [ ixFun ((:[]) . mediumId)
                  ]