@startuml
skinparam monochrome true
skinparam packageStyle rectangle
skinparam shadowing false
autonumber
actor "Human\nResources\nManager" as HRM
participant ":CreateCollaboratorUI" as UI
participant ":CreateCollaboratorController" as CC
participant "collaboratorRepository\n:CollaboratorRepository" as Repository
participant "collaborator\n:Collaborator" as Collaborator
participant ":Repositories" as RepositorySingleton
participant "repositories\n:Repositories" as Repositories
participant "adress\n:Adress" as Adress
activate HRM

    HRM -> UI : asks to create a new collaborator
    activate UI

        UI -> CC** : create
        UI --> HRM : requests data from adress (i.e. city, street), zipcode (i.e. number, locality), citizenCard (i.e. number, taxpayer number), passport (i.e. number) followed by name, birth date, admission date, phone number and email
    deactivate UI
        HRM -> UI : types requested data
    activate UI

        UI -> CC : getJobs()
        activate CC

        CC -> RepositorySingleton : getInstance()
        activate RepositorySingleton

        RepositorySingleton -> CC : repositories
        deactivate RepositorySingleton

        CC -> Repositories : getJobs()
        activate Repositories

        Repositories -> CC : jobsList
        deactivate Repositories

        CC -> JobsRepository : getJobs()
        activate JobsRepository

        JobsRepository --> CC : jobsList
        deactivate JobsRepository
        CC --> UI : jobsList
        deactivate CC

    UI --> HRM : shows jobs and asks to select one
    deactivate UI
        HRM -> UI : selects a job
    activate UI

        UI --> HRM : displays all data and requests confirmation
    deactivate UI
        HRM -> UI : confirms the data
    activate UI

        UI -> CC : createCollaborator()
        activate CC

            CC -> Repository : createCollaborator(name, birthDate, admissionDate, phoneNumber, email, city, street, number, )
            activate Repository

            Repository -> Collaborator : createCollaborator(brand, model, type, plateId, tare, grossWeight,\n registerDate, currentKms, acquisitionDate, maintenanceFrequency)
            activate Collaborator

            Collaborator -> Registration : createAdress(city, street)
            Collaborator -> Registration : createCitizenCard(number, taxpayerNumber)
            Collaborator -> Registration : createPassport(number)
            Adress -> Registration : createZipCode(number, locality)
            deactivate Collaborator
            deactivate Adress
            Repository -> Repository : addCollaborator(Collaborator)
            Repository -> Repository : validateCollaborator(Collaborator)
            Repository --> CC : collaborator
            deactivate Repository

            CC --> UI : collaborator
        deactivate CC
            UI --> HRM : displays operation success
    deactivate UI
deactivate HRM
@enduml