@startuml
skinparam monochrome true
skinparam packageStyle rectangle
skinparam shadowing false

title System Sequence Diagram (SSD) - US004

autonumber

actor "Human Resources Manager" as HRM
participant ":AssignSkillsUI" as UI
participant ":AssignSkillsController" as CTRL
participant ":Repositories" as RepositorySingleton
participant "repositories\n:Repositories" as PLAT
participant "collaboratorRepository\n:CollaboratorRepository" as CollaboratorRepository
participant "skillRepository\n:SkillRepository" as SkillRepository

activate HRM

HRM -> UI : request to assign skills to a collaborator
activate UI
UI -> CTRL : getAvailableSkills()
activate CTRL
CTRL -> RepositorySingleton : getInstance()
activate RepositorySingleton
RepositorySingleton -> CTRL : repositories
deactivate RepositorySingleton
CTRL -> PLAT : getSkillRepository()
activate PLAT
PLAT -> CTRL : skillRepository
deactivate PLAT
CTRL -> SkillRepository : getAvailableSkills()
activate SkillRepository
SkillRepository --> CTRL : availableSkills
deactivate SkillRepository
CTRL --> UI : availableSkills
deactivate CTRL
UI --> HRM : displays a list of available skills
deactivate UI

HRM -> UI : select collaborator skills
activate UI
UI -> CTRL : confirmSkills(selectedSkills)
activate CTRL
CTRL -> UI : requests confirmation
deactivate CTRL
UI --> HRM : confirms
deactivate UI

HRM -> CTRL : assignSkillsToCollaborator(selectedSkills, collaborator)
activate CTRL
CTRL -> RepositorySingleton : getInstance()
activate RepositorySingleton
RepositorySingleton --> CTRL: repositories
deactivate RepositorySingleton
CTRL -> CollaboratorRepository : getCollaboratorRepository()
activate CollaboratorRepository
CollaboratorRepository --> CTRL : collaboratorRepository
deactivate CollaboratorRepository
CTRL -> CollaboratorRepository : assignSkillsToCollaborator(selectedSkills, collaborator)
activate CollaboratorRepository
CollaboratorRepository --> CTRL : assignedSkills
deactivate CollaboratorRepository
CTRL --> HRM : displays operation success
deactivate CTRL

@enduml

