content: {-# LANGUAGE OverloadedStrings, TemplateHaskell #-}
  module Web.Slack.Types.Team where
  
  import Data.Text (Text)
  import Web.Slack.Types.Id
  import Web.Slack.Types.TeamPreferences
  import Web.Slack.Types.Base
  
  import Control.Lens.TH
  import Data.Aeson
  import Control.Applicative
  import Prelude
  
  data Team = Team
            { _teamId                :: TeamId
            , _teamName              :: Text
            , _teamEmailDomain       :: Text
            , _teamDomain            :: Text
            , _teamPreferences       :: TeamPreferences
            , _teamIcons             :: TeamIcons
            , _teamOverStorageLimit  :: Bool
            } deriving Show
  
  data TeamIcons = TeamIcons
                 { _teamIcon34      :: URL
                 , _teamIcon44      :: URL
                 , _teamIcon68      :: URL
                 , _teamIcon88      :: URL
                 , _teamIcon102     :: URL
                 , _teamIcon132     :: URL
                 , _teamIconDefault :: Maybe Bool
                 } deriving Show
  
  makeLenses ''Team
  makeLenses ''TeamIcons
  
  instance FromJSON Team where
    parseJSON = withObject "team"
                  (\o -> Team <$> o .: "id" <*> o .: "name"
                          <*> o .: "email_domain" <*> o .: "domain"
                          <*> o .: "prefs"
                          <*> o .: "icon" <*> o .: "over_storage_limit")
  
  instance FromJSON TeamIcons where
   parseJSON = withObject "teamIcons"
                (\o -> TeamIcons
                        <$> o .: "image_34"
                        <*> o .: "image_44"
                        <*> o .: "image_68"
                        <*> o .: "image_88"
                        <*> o .: "image_102"
                        <*> o .: "image_132"
                        <*> o .:? "image_default")
  