{-# LANGUAGE DeriveGeneric #-}



module ChatWork.Types.IncomingRequests

    ( IncomingRequests

    , IncomingRequest(..)

    , AcceptedIncomingRequest(..)

    ) 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 IncomingRequests = [IncomingRequest]



data IncomingRequest = IncomingRequest

                     { incomingRequestToRequestId        :: Int

                     , incomingRequestToAccountId        :: Int

                     , incomingRequestToMessage          :: Text

                     , incomingRequestToName             :: Text

                     , incomingRequestToChatworkId       :: Text

                     , incomingRequestToOrganizationId   :: Int

                     , incomingRequestToOrganizationName :: Text

                     , incomingRequestToDepartment       :: Text

                     , incomingRequestToAvatarImageUrl   :: Text

                     } deriving (Eq, Show, Generic)



instance ToJSON IncomingRequest where

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

instance FromJSON IncomingRequest where

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



data AcceptedIncomingRequest = AcceptedIncomingRequest

                             { acceptedIncomingRequestToAccountId        :: Int

                             , acceptedIncomingRequestToRoomId           :: Int

                             , acceptedIncomingRequestToName             :: Text

                             , acceptedIncomingRequestToChatworkId       :: Text

                             , acceptedIncomingRequestToOrganizationId   :: Int

                             , acceptedIncomingRequestToOrganizationName :: Text

                             , acceptedIncomingRequestToDepartment       :: Text

                             , acceptedIncomingRequestToAvatarImageUrl   :: Text

                             } deriving (Eq, Show, Generic)



instance ToJSON AcceptedIncomingRequest where

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

instance FromJSON AcceptedIncomingRequest where

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