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

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

Class UniquePersonList
Class Person
Class Faculty
Class Email
Class Name
Class Phone
Class Tag
Class Role

}

Class HiddenOutside #Teal
HiddenOutside ..> Model

AddressBook .up.|> ReadOnlyAddressBook

ModelManager .up.|> Model
Model .right.> ReadOnlyUserPrefs
Model .left.> ReadOnlyAddressBook
ModelManager -left-> "<color:maroon>1" AddressBook
ModelManager -right-> "<color:maroon>1" UserPrefs
UserPrefs .up.|> ReadOnlyUserPrefs

AddressBook *--> "<color:maroon>1" UniquePersonList
UniquePersonList --> "<color:maroon>~* all" Person
Person *--> Name
Person *--> Phone
Person *--> Email
Person *--> Faculty
Person *--> Role
Person *--> "<color:maroon>*" Tag

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

ModelManager -->"<color:maroon>~* filtered" Person
@enduml
