{-# LANGUAGE DeriveGeneric #-}

module ChatWork.Types.Me
    ( Me(..)
    ) where

import           ChatWork.Utils    (strLength)
import           Data.Aeson        (FromJSON (..), ToJSON (..),
                                    genericParseJSON, genericToJSON)
import           Data.Aeson.Casing (aesonDrop, snakeCase)
import           Data.Text         (Text)
import           GHC.Generics      (Generic)

data Me = Me
         { meToAccountId        :: Int
         , meToRoomId           :: Int
         , meToName             :: Text
         , meToChatworkId       :: Text
         , meToOrganizationId   :: Int
         , meToOrganizationName :: Text
         , meToDepartment       :: Text
         , meToTitle            :: Text
         , meToUrl              :: Text
         , meToIntroduction     :: Text
         , meToMail             :: Text
         , meToTelOrganization  :: Text
         , meToTelExtension     :: Text
         , meToTelMobile        :: Text
         , meToSkype            :: Text
         , meToFacebook         :: Text
         , meToTwitter          :: Text
         , meToAvatarImageUrl   :: Text
         } deriving (Eq, Show, Generic)

instance ToJSON Me where
  toJSON = genericToJSON $ aesonDrop (strLength "meTo") snakeCase
instance FromJSON Me where
  parseJSON = genericParseJSON $ aesonDrop (strLength "meTo") snakeCase