@startuml
'skinparam monochrome true
skinparam packageStyle rectangle
skinparam shadowing false
skinparam linetype polyline

skinparam classAttributeIconSize 0

class TeamProposalUI {
    - TeamProposalController controller

    + submitTeamProposalData()
}

class TeamProposalController {
    - SkillRepository skillRepository
    - CollaboratorRepository collaboratorRepository
    - TeamRepository teamRepository
    + TeamProposalController()
    + submitTeamProposalData(minTeamSize, maxTeamSize, necessarySkills)
    + validateNecessarySkills(necessarySkills)
    + finalizeTeamCreation(teamMembers, skills, minTeamSize, maxTeamSize)
    + setTeamStatus(statusInput, team)
}

class Repositories {
    - SkillRepository skillRepository
    - CollaboratorRepository collaboratorRepository
    - TeamRepository teamRepository
    + Repositories()
    + getSkillRepository()
    + getCollaboratorRepository()
    + getTeamRepository()
}
class SkillRepository {
    - List<Skill> skills
    + SkillRepository()
    + getSkillByName(skillName)
    + getAllSkills()
}

class Skill {
    - String name
    + Skill(name)
    + getName()
}

class Collaborator {
    - String name
    - Date birthDate
    - String address
    - String mobileNumber
    - String emailAddress
    - String taxpayerNumber
    - String idDocumentType
    - String idDocumentNumber
    - String job
    - List<Skill> skills
    - Team currentTeam
    + setCurrentTeam(currentTeam)
    + getSkills()
}

class Team {
    - int teamId
    - int minSize
    - int maxSize
    - List<Skill> necessarySkills
    - List<Collaborator> teamMembers
    - Team.Status status
    + Team(teamId, minSize, maxSize, necessarySkills, teamMembers)
    + setStatus(status)
}

class CollaboratorRepository {
    - List<Collaborator> collaborators
    + CollaboratorRepository()
    + getAllCollaborators()
}

class TeamRepository {
    - List<Team> teams
    + TeamRepository()
    + addTeam(team)
    + getAllTeams()
    + getTeamById(teamId)
}

TeamProposalUI .down.> TeamProposalController

TeamProposalController ..> Repositories

Repositories .right.> SkillRepository
Repositories .down.> CollaboratorRepository
Repositories .down.> TeamRepository
SkillRepository .right.> Skill
CollaboratorRepository .down.> Collaborator
TeamRepository .down.> Team

Team --> "many" Collaborator : teamMembers
Team --> "many" Skill : necessarySkills

@enduml
