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

class Employee {
    - name: String
    - email: String
    - position: String
    - skills: Set<Skill>
    + Employee(name, email, position, skills)
    + getName(): String
    + getEmail(): String
    + getPosition(): String
    + getSkills(): Set<Skill>
}

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

class Repositories{
}


class TeamProposal {
    - maxTeamSize: int
    - minTeamSize: int
    - requiredSkills: Set<Skill>
    + TeamProposal(maxTeamSize, minTeamSize, requiredSkills)
    + getMaxTeamSize(): int
    + getMinTeamSize(): int
    + getRequiredSkills(): Set<Skill>
}

class EmployeeRepository {
    + getEmployeesBySkills(requiredSkills: Set<Skill>): List<Employee>
}

class TeamProposalController {
    + generateTeamProposal(maxTeamSize: int, minTeamSize: int, requiredSkills: Set<Skill>): TeamProposal
}
class SkillRepositories{
    + getAvailableSkills() : List <Skill>
}

class TeamProposalUI{
}

Employee "1" --> "*" TeamProposal : creates
SkillRepositories "1" --> "*" Skill : retrieves
Repositories "1" --> "1" SkillRepositories : uses
TeamProposalUI "1" --> "1" TeamProposalController
TeamProposalController "1" --> "1" Repositories
Employee "1" --> "*" Skill : possesses
TeamProposal "1" --> "*" Skill : requires
EmployeeRepository "1" --> "*" Employee : retrieves
Repositories "1" --> "1" EmployeeRepository : uses

@enduml
