@startuml
!include style.puml
skinparam arrowThickness 1.1
skinparam arrowColor MODEL_COLOR
skinparam classBackgroundColor MODEL_COLOR

Package Model <<Rectangle>>{
Interface ReadOnlyHairStyleX <<Interface>>
Interface Model <<Interface>>
Interface ObservableList <<Interface>>
Class HairStyleX
Class ReadOnlyHairStyleX
Class Model
Class ModelManager
Class UserPrefs
Class ReadOnlyUserPrefs

Package Entity {
Interface Entity <<Interface>>


Package EntityList {
Abstract Class "{abstract} \nUniqueEntityList" as UniqueEntityList
Class UniqueClientList
Class UniqueHairdresserList
Class UniqueAppointmentList
}

Package Person {
Abstract Class "{abstract} \nPerson" as Person


Class Client

Class Hairdresser


}

Class Appointment


}
}
Class HiddenOutside #FFFFFF
HiddenOutside ..> Model



HairStyleX .up.|> ReadOnlyHairStyleX

Person .down.|> Entity
Appointment .down.|> Entity
Hairdresser --|> Person
Client --|> Person
UniqueAppointmentList -up-|> UniqueEntityList
UniqueClientList -up-|> UniqueEntityList
UniqueHairdresserList -up-|> UniqueEntityList


ModelManager .up.|> Model
Model .right.> ObservableList
ModelManager o-left-> "1" HairStyleX
ModelManager o-right-> "1" UserPrefs
UserPrefs .up.|> ReadOnlyUserPrefs

HairStyleX *-down-> "1" UniqueAppointmentList
HairStyleX *-down-> "1" UniqueClientList
HairStyleX *-down-> "1" UniqueHairdresserList
UniqueAppointmentList o-down-> "*" Appointment

UniqueClientList o-down-> "*" Client
UniqueHairdresserList o-down-> "*" Hairdresser



ModelManager -[hidden]down-> EntityList



@enduml
