@startuml
skinparam monochrome true
skinparam packageStyle rectangle
skinparam shadowing false

autonumber

actor "Agent" as Agent
participant "SendEmailUI" as UI
participant "PlaceVisitRequestController" as visitCTR
participant "repositories\n:Repositories" as repositories
participant "visitRequestsRepository\n:VisitRequestsRepository" as VisitRepository
participant "DataValidator" as validator

activate Agent

       Agent -> UI : selects a visit request
          activate UI

UI -> visitCTR : Visit
activate visitCTR

visitCTR -> repositories : getVisitRepository()
                 activate repositories

                    repositories --> visitCTR : VisitRepository
                 deactivate repositories

                     visitCTR -> VisitRepository : getVisitList()
                 activate VisitRepository

                    VisitRepository --> visitCTR : VisitList
                 deactivate VisitRepository

                 visitCTR --> UI : clientEmail and visitID
                deactivate visitCTR
loop while !validation
                    UI --> Agent : shows email service list and asks to \n choose one
                deactivate UI

                    Agent -> UI : selects a email service
                activate UI
UI -> validator : emailService
activate validator

validator --> UI : validation
deactivate validator
end
                    UI --> Agent : asks to write a message/response
                deactivate UI

                    Agent -> UI : types the message
                activate UI

                    UI --> Agent : asks for confirmation
                deactivate UI

                Agent -> UI : gives confirmation
                      activate UI

UI -> visitCTR: sendConfirmation()
activate visitCTR

visitCTR -> repositories: getVisitRepository()
activate repositories

repositories --> visitCTR: VisitRepository
deactivate repositories

visitCTR -> VisitRepository: getVisitByID(visitID)
activate VisitRepository

VisitRepository --> visitCTR: Visit
deactivate VisitRepository

visitCTR --> UI: Visit
deactivate visitCTR

UI --> Agent: displays Visit confirmation
deactivate UI


deactivate UI
deactivate Agent
@enduml