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

Package Model <<Rectangle>>{
Class "<<interface>>\nReadOnlyConnectUs" as ReadOnlyConnectUs
Class "<<interface>>\nReadOnlyUserPrefs" as ReadOnlyUserPrefs
Class "<<interface>>\nModel" as Model
Class ConnectUs
Class ModelManager
Class UserPrefs

Class UniquePersonList
Class Person
Class Address
Class Email
Class Name
Class Phone
Class Birthday
Class SocialMedia
Class Module
Class CCA
Class Major
Class Remark

}

Class HiddenOutside #FFFFFF
HiddenOutside ..> Model

ConnectUs .up.|> ReadOnlyConnectUs

ModelManager .up.|> Model
Model .right.> ReadOnlyUserPrefs
Model .left.> ReadOnlyConnectUs
ModelManager -left-> "1" ConnectUs
ModelManager -right-> "1" UserPrefs
UserPrefs .up.|> ReadOnlyUserPrefs

ConnectUs *--> "1" UniquePersonList
UniquePersonList --> "~* all" Person
Person *--> Name
Person *--> "0..1" Phone
Person *--> "0..1" Email
Person *--> "0..1" Address
Person *--> "0..1" Birthday
Person *--> "0..1" SocialMedia
Person *--> "*" Module
Person *--> "*" CCA
Person *--> "0..2" Major
Person *--> "*" Remark

Name -[hidden]right-> Phone
Phone -[hidden]right-> Address
Address -[hidden]right-> Email
Email -[hidden]right-> Birthday
Birthday -[hidden]right-> SocialMedia
SocialMedia -[hidden]right-> Module
Module -[hidden]right-> CCA
CCA -[hidden]right-> Major
Major -[hidden]right-> Remark

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