@startuml
skinparam monochrome true
skinparam packageStyle rectangle
skinparam shadowing false

autonumber

actor "System Administrator" as sysAdmin
participant ":RegisterEmployeeUI" as UI
participant ":RegisterEmployeeController" as CTRL
participant ":EmployeeRepository" as EmployeeRepo
participant ":AgencyRepository" as AgencyRepo

activate sysAdmin

sysAdmin -> UI : requests to register a new employee
activate UI

UI --> sysAdmin : requests the role of the new employee
deactivate UI

sysAdmin -> UI : provides the role of the new employee
activate UI

UI -> CTRL : getAgencies()
activate CTRL

CTRL -> AgencyRepo : getAllAgencies()
activate AgencyRepo

AgencyRepo --> CTRL : agencyList
deactivate AgencyRepo

CTRL --> UI : agencyList
deactivate CTRL

UI --> sysAdmin : shows the list of agencies
deactivate UI

sysAdmin -> UI : selects the agency from the list
activate UI

UI --> sysAdmin : requests the name, passport card number, tax number, address, email address, contact telephone number
deactivate UI

sysAdmin -> UI : provides the necessary data
activate UI

UI -> CTRL : registerEmployee(role, name, passportCardNumber, taxNumber, address, email, telephoneNumber, selectedAgency)
activate CTRL

CTRL -> EmployeeRepo : createEmployee(role, name, passportCardNumber, taxNumber, address, email, telephoneNumber, selectedAgency)
activate EmployeeRepo

EmployeeRepo -> EmployeeRepo : validateData()
activate EmployeeRepo

EmployeeRepo --> EmployeeRepo : validationResult
deactivate EmployeeRepo

EmployeeRepo -> EmployeeRepo : generatePassword()
activate EmployeeRepo

EmployeeRepo --> EmployeeRepo : generatedPassword
deactivate EmployeeRepo

EmployeeRepo -> EmployeeRepo : saveEmployee()
activate EmployeeRepo

EmployeeRepo --> CTRL : success
deactivate EmployeeRepo

CTRL --> UI : success
deactivate CTRL

UI -> UI : displaySuccessMessage()
activate UI

UI --> sysAdmin : operation success message
deactivate UI

UI -> UI : sendPasswordByEmail(email, generatedPassword)
activate UI

UI --> sysAdmin : password sent to the employee's email
deactivate UI

deactivate sysAdmin

@enduml
