{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.Connect.Types.AgentContactReference
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.Connect.Types.AgentContactReference where

import Amazonka.Connect.Types.Channel
import Amazonka.Connect.Types.ContactInitiationMethod
import Amazonka.Connect.Types.ContactState
import Amazonka.Connect.Types.QueueReference
import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import qualified Amazonka.Prelude as Prelude

-- | Information about the
-- <https://docs.aws.amazon.com/connect/latest/APIReference/API_Contact.html contact>
-- associated to the user.
--
-- /See:/ 'newAgentContactReference' smart constructor.
data AgentContactReference = AgentContactReference'
  { -- | The
    -- <https://docs.aws.amazon.com/connect/latest/adminguide/about-contact-states.html state of the contact>.
    AgentContactReference -> Maybe ContactState
agentContactState :: Prelude.Maybe ContactState,
    -- | The channel of the contact.
    AgentContactReference -> Maybe Channel
channel :: Prelude.Maybe Channel,
    -- | The time at which the contact was connected to an agent.
    AgentContactReference -> Maybe POSIX
connectedToAgentTimestamp :: Prelude.Maybe Data.POSIX,
    -- | The identifier of the contact in this instance of Amazon Connect.
    AgentContactReference -> Maybe Text
contactId :: Prelude.Maybe Prelude.Text,
    -- | How the contact was initiated.
    AgentContactReference -> Maybe ContactInitiationMethod
initiationMethod :: Prelude.Maybe ContactInitiationMethod,
    AgentContactReference -> Maybe QueueReference
queue :: Prelude.Maybe QueueReference,
    -- | The epoch timestamp when the contact state started.
    AgentContactReference -> Maybe POSIX
stateStartTimestamp :: Prelude.Maybe Data.POSIX
  }
  deriving (AgentContactReference -> AgentContactReference -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AgentContactReference -> AgentContactReference -> Bool
$c/= :: AgentContactReference -> AgentContactReference -> Bool
== :: AgentContactReference -> AgentContactReference -> Bool
$c== :: AgentContactReference -> AgentContactReference -> Bool
Prelude.Eq, ReadPrec [AgentContactReference]
ReadPrec AgentContactReference
Int -> ReadS AgentContactReference
ReadS [AgentContactReference]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [AgentContactReference]
$creadListPrec :: ReadPrec [AgentContactReference]
readPrec :: ReadPrec AgentContactReference
$creadPrec :: ReadPrec AgentContactReference
readList :: ReadS [AgentContactReference]
$creadList :: ReadS [AgentContactReference]
readsPrec :: Int -> ReadS AgentContactReference
$creadsPrec :: Int -> ReadS AgentContactReference
Prelude.Read, Int -> AgentContactReference -> ShowS
[AgentContactReference] -> ShowS
AgentContactReference -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [AgentContactReference] -> ShowS
$cshowList :: [AgentContactReference] -> ShowS
show :: AgentContactReference -> String
$cshow :: AgentContactReference -> String
showsPrec :: Int -> AgentContactReference -> ShowS
$cshowsPrec :: Int -> AgentContactReference -> ShowS
Prelude.Show, forall x. Rep AgentContactReference x -> AgentContactReference
forall x. AgentContactReference -> Rep AgentContactReference x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep AgentContactReference x -> AgentContactReference
$cfrom :: forall x. AgentContactReference -> Rep AgentContactReference x
Prelude.Generic)

-- |
-- Create a value of 'AgentContactReference' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'agentContactState', 'agentContactReference_agentContactState' - The
-- <https://docs.aws.amazon.com/connect/latest/adminguide/about-contact-states.html state of the contact>.
--
-- 'channel', 'agentContactReference_channel' - The channel of the contact.
--
-- 'connectedToAgentTimestamp', 'agentContactReference_connectedToAgentTimestamp' - The time at which the contact was connected to an agent.
--
-- 'contactId', 'agentContactReference_contactId' - The identifier of the contact in this instance of Amazon Connect.
--
-- 'initiationMethod', 'agentContactReference_initiationMethod' - How the contact was initiated.
--
-- 'queue', 'agentContactReference_queue' - Undocumented member.
--
-- 'stateStartTimestamp', 'agentContactReference_stateStartTimestamp' - The epoch timestamp when the contact state started.
newAgentContactReference ::
  AgentContactReference
newAgentContactReference :: AgentContactReference
newAgentContactReference =
  AgentContactReference'
    { $sel:agentContactState:AgentContactReference' :: Maybe ContactState
agentContactState =
        forall a. Maybe a
Prelude.Nothing,
      $sel:channel:AgentContactReference' :: Maybe Channel
channel = forall a. Maybe a
Prelude.Nothing,
      $sel:connectedToAgentTimestamp:AgentContactReference' :: Maybe POSIX
connectedToAgentTimestamp = forall a. Maybe a
Prelude.Nothing,
      $sel:contactId:AgentContactReference' :: Maybe Text
contactId = forall a. Maybe a
Prelude.Nothing,
      $sel:initiationMethod:AgentContactReference' :: Maybe ContactInitiationMethod
initiationMethod = forall a. Maybe a
Prelude.Nothing,
      $sel:queue:AgentContactReference' :: Maybe QueueReference
queue = forall a. Maybe a
Prelude.Nothing,
      $sel:stateStartTimestamp:AgentContactReference' :: Maybe POSIX
stateStartTimestamp = forall a. Maybe a
Prelude.Nothing
    }

-- | The
-- <https://docs.aws.amazon.com/connect/latest/adminguide/about-contact-states.html state of the contact>.
agentContactReference_agentContactState :: Lens.Lens' AgentContactReference (Prelude.Maybe ContactState)
agentContactReference_agentContactState :: Lens' AgentContactReference (Maybe ContactState)
agentContactReference_agentContactState = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AgentContactReference' {Maybe ContactState
agentContactState :: Maybe ContactState
$sel:agentContactState:AgentContactReference' :: AgentContactReference -> Maybe ContactState
agentContactState} -> Maybe ContactState
agentContactState) (\s :: AgentContactReference
s@AgentContactReference' {} Maybe ContactState
a -> AgentContactReference
s {$sel:agentContactState:AgentContactReference' :: Maybe ContactState
agentContactState = Maybe ContactState
a} :: AgentContactReference)

-- | The channel of the contact.
agentContactReference_channel :: Lens.Lens' AgentContactReference (Prelude.Maybe Channel)
agentContactReference_channel :: Lens' AgentContactReference (Maybe Channel)
agentContactReference_channel = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AgentContactReference' {Maybe Channel
channel :: Maybe Channel
$sel:channel:AgentContactReference' :: AgentContactReference -> Maybe Channel
channel} -> Maybe Channel
channel) (\s :: AgentContactReference
s@AgentContactReference' {} Maybe Channel
a -> AgentContactReference
s {$sel:channel:AgentContactReference' :: Maybe Channel
channel = Maybe Channel
a} :: AgentContactReference)

-- | The time at which the contact was connected to an agent.
agentContactReference_connectedToAgentTimestamp :: Lens.Lens' AgentContactReference (Prelude.Maybe Prelude.UTCTime)
agentContactReference_connectedToAgentTimestamp :: Lens' AgentContactReference (Maybe UTCTime)
agentContactReference_connectedToAgentTimestamp = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AgentContactReference' {Maybe POSIX
connectedToAgentTimestamp :: Maybe POSIX
$sel:connectedToAgentTimestamp:AgentContactReference' :: AgentContactReference -> Maybe POSIX
connectedToAgentTimestamp} -> Maybe POSIX
connectedToAgentTimestamp) (\s :: AgentContactReference
s@AgentContactReference' {} Maybe POSIX
a -> AgentContactReference
s {$sel:connectedToAgentTimestamp:AgentContactReference' :: Maybe POSIX
connectedToAgentTimestamp = Maybe POSIX
a} :: AgentContactReference) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | The identifier of the contact in this instance of Amazon Connect.
agentContactReference_contactId :: Lens.Lens' AgentContactReference (Prelude.Maybe Prelude.Text)
agentContactReference_contactId :: Lens' AgentContactReference (Maybe Text)
agentContactReference_contactId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AgentContactReference' {Maybe Text
contactId :: Maybe Text
$sel:contactId:AgentContactReference' :: AgentContactReference -> Maybe Text
contactId} -> Maybe Text
contactId) (\s :: AgentContactReference
s@AgentContactReference' {} Maybe Text
a -> AgentContactReference
s {$sel:contactId:AgentContactReference' :: Maybe Text
contactId = Maybe Text
a} :: AgentContactReference)

-- | How the contact was initiated.
agentContactReference_initiationMethod :: Lens.Lens' AgentContactReference (Prelude.Maybe ContactInitiationMethod)
agentContactReference_initiationMethod :: Lens' AgentContactReference (Maybe ContactInitiationMethod)
agentContactReference_initiationMethod = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AgentContactReference' {Maybe ContactInitiationMethod
initiationMethod :: Maybe ContactInitiationMethod
$sel:initiationMethod:AgentContactReference' :: AgentContactReference -> Maybe ContactInitiationMethod
initiationMethod} -> Maybe ContactInitiationMethod
initiationMethod) (\s :: AgentContactReference
s@AgentContactReference' {} Maybe ContactInitiationMethod
a -> AgentContactReference
s {$sel:initiationMethod:AgentContactReference' :: Maybe ContactInitiationMethod
initiationMethod = Maybe ContactInitiationMethod
a} :: AgentContactReference)

-- | Undocumented member.
agentContactReference_queue :: Lens.Lens' AgentContactReference (Prelude.Maybe QueueReference)
agentContactReference_queue :: Lens' AgentContactReference (Maybe QueueReference)
agentContactReference_queue = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AgentContactReference' {Maybe QueueReference
queue :: Maybe QueueReference
$sel:queue:AgentContactReference' :: AgentContactReference -> Maybe QueueReference
queue} -> Maybe QueueReference
queue) (\s :: AgentContactReference
s@AgentContactReference' {} Maybe QueueReference
a -> AgentContactReference
s {$sel:queue:AgentContactReference' :: Maybe QueueReference
queue = Maybe QueueReference
a} :: AgentContactReference)

-- | The epoch timestamp when the contact state started.
agentContactReference_stateStartTimestamp :: Lens.Lens' AgentContactReference (Prelude.Maybe Prelude.UTCTime)
agentContactReference_stateStartTimestamp :: Lens' AgentContactReference (Maybe UTCTime)
agentContactReference_stateStartTimestamp = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AgentContactReference' {Maybe POSIX
stateStartTimestamp :: Maybe POSIX
$sel:stateStartTimestamp:AgentContactReference' :: AgentContactReference -> Maybe POSIX
stateStartTimestamp} -> Maybe POSIX
stateStartTimestamp) (\s :: AgentContactReference
s@AgentContactReference' {} Maybe POSIX
a -> AgentContactReference
s {$sel:stateStartTimestamp:AgentContactReference' :: Maybe POSIX
stateStartTimestamp = Maybe POSIX
a} :: AgentContactReference) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall (a :: Format). Iso' (Time a) UTCTime
Data._Time

instance Data.FromJSON AgentContactReference where
  parseJSON :: Value -> Parser AgentContactReference
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"AgentContactReference"
      ( \Object
x ->
          Maybe ContactState
-> Maybe Channel
-> Maybe POSIX
-> Maybe Text
-> Maybe ContactInitiationMethod
-> Maybe QueueReference
-> Maybe POSIX
-> AgentContactReference
AgentContactReference'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"AgentContactState")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Channel")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"ConnectedToAgentTimestamp")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"ContactId")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"InitiationMethod")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Queue")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"StateStartTimestamp")
      )

instance Prelude.Hashable AgentContactReference where
  hashWithSalt :: Int -> AgentContactReference -> Int
hashWithSalt Int
_salt AgentContactReference' {Maybe Text
Maybe POSIX
Maybe Channel
Maybe ContactInitiationMethod
Maybe ContactState
Maybe QueueReference
stateStartTimestamp :: Maybe POSIX
queue :: Maybe QueueReference
initiationMethod :: Maybe ContactInitiationMethod
contactId :: Maybe Text
connectedToAgentTimestamp :: Maybe POSIX
channel :: Maybe Channel
agentContactState :: Maybe ContactState
$sel:stateStartTimestamp:AgentContactReference' :: AgentContactReference -> Maybe POSIX
$sel:queue:AgentContactReference' :: AgentContactReference -> Maybe QueueReference
$sel:initiationMethod:AgentContactReference' :: AgentContactReference -> Maybe ContactInitiationMethod
$sel:contactId:AgentContactReference' :: AgentContactReference -> Maybe Text
$sel:connectedToAgentTimestamp:AgentContactReference' :: AgentContactReference -> Maybe POSIX
$sel:channel:AgentContactReference' :: AgentContactReference -> Maybe Channel
$sel:agentContactState:AgentContactReference' :: AgentContactReference -> Maybe ContactState
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ContactState
agentContactState
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Channel
channel
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe POSIX
connectedToAgentTimestamp
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
contactId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ContactInitiationMethod
initiationMethod
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe QueueReference
queue
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe POSIX
stateStartTimestamp

instance Prelude.NFData AgentContactReference where
  rnf :: AgentContactReference -> ()
rnf AgentContactReference' {Maybe Text
Maybe POSIX
Maybe Channel
Maybe ContactInitiationMethod
Maybe ContactState
Maybe QueueReference
stateStartTimestamp :: Maybe POSIX
queue :: Maybe QueueReference
initiationMethod :: Maybe ContactInitiationMethod
contactId :: Maybe Text
connectedToAgentTimestamp :: Maybe POSIX
channel :: Maybe Channel
agentContactState :: Maybe ContactState
$sel:stateStartTimestamp:AgentContactReference' :: AgentContactReference -> Maybe POSIX
$sel:queue:AgentContactReference' :: AgentContactReference -> Maybe QueueReference
$sel:initiationMethod:AgentContactReference' :: AgentContactReference -> Maybe ContactInitiationMethod
$sel:contactId:AgentContactReference' :: AgentContactReference -> Maybe Text
$sel:connectedToAgentTimestamp:AgentContactReference' :: AgentContactReference -> Maybe POSIX
$sel:channel:AgentContactReference' :: AgentContactReference -> Maybe Channel
$sel:agentContactState:AgentContactReference' :: AgentContactReference -> Maybe ContactState
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe ContactState
agentContactState
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Channel
channel
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
connectedToAgentTimestamp
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
contactId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ContactInitiationMethod
initiationMethod
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe QueueReference
queue
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
stateStartTimestamp