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

Package Model as ModelPackage <<Rectangle>>{
Class "<<interface>>\nReadOnlyAddressBook" as ReadOnlyAddressBook
Class "<<interface>>\nReadOnlyUserPrefs" as ReadOnlyUserPrefs
Class "<<interface>>\nModel" as Model
Class AddressBook
Class ModelManager
Class UserPrefs

Class UniqueClientList
Class Client
Class Address
Class Email
Class Name
Class Phone
Class Tag

Class OrderList
Class Order
Class OrderId
Class OrderDate
Class Deadline
Class Price
Class Description
Class Status
Class ClientId

Class I #FFFFFF
}

Class HiddenOutside #FFFFFF
HiddenOutside ..> Model

AddressBook .up.|> ReadOnlyAddressBook

ModelManager .up.|> Model
Model .right.> ReadOnlyUserPrefs
Model .left.> ReadOnlyAddressBook
ModelManager -left-> "1" AddressBook
ModelManager -right-> "1" UserPrefs
UserPrefs .up.|> ReadOnlyUserPrefs

AddressBook *--> "1" UniqueClientList
UniqueClientList --> "~* all" Client
Client *--> Name
Client *--> Phone
Client *--> Email
Client *--> Address
Client *--> "*" Tag

UniqueClientList -[hidden]right-> I

Name -[hidden]right-> Phone
Phone -[hidden]right-> Address
Address -[hidden]right-> Email

AddressBook *--> "1" OrderList


OrderList --> "~* all" Order
Order -[hidden]up->Name
Order *--> OrderId
Order *--> OrderDate
Order *--> Deadline
Order *--> Price
Order *--> Description
Order *--> Status
Order *--> ClientId

ModelManager --> "~* filtered" Client
@enduml
