{-# LANGUAGE DeriveGeneric #-}



module ChatWork.Types.Contacts

    ( Contacts

    , Contact(..)

    ) 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)



type Contacts = [Contact]



data Contact = Contact

             { contactToAccountId        :: Int

             , contactToRoomId           :: Int

             , contactToName             :: Text

             , contactToChatworkId       :: Text

             , contactToOrganizationId   :: Int

             , contactToOrganizationName :: Text

             , contactToDepartment       :: Text

             , contactToAvatarImageUrl   :: Text

             } deriving (Eq, Show, Generic)



instance ToJSON Contact where

  toJSON = genericToJSON $ aesonDrop (strLength "contactTo") snakeCase

instance FromJSON Contact where

  parseJSON = genericParseJSON $ aesonDrop (strLength "contactTo") snakeCase