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

package Logic {

package Parser {
Interface Parser <<Interface>>
Class HeyMatezParser
Class XYZCommandParser
Class CliSyntax
Class ParserUtil
Class ArgumentMultimap
Class ArgumentTokenizer
Class Prefix
}

package Command {
Class XYZCommand
Class CommandResult
Class "{abstract}\nCommand" as Command
}

Interface Logic <<Interface>>
Class LogicManager
}

package Model{
Class HiddenModel #FFFFFF
}

package Storage {
Class HiddenModel #FFFFFF
}

Class HiddenOutside #FFFFFF
HiddenOutside ..> Logic

LogicManager .up.|> Logic
LogicManager -->"1" HeyMatezParser
HeyMatezParser .left.> XYZCommandParser: creates >

XYZCommandParser ..> XYZCommand : creates >
XYZCommandParser ..|> Parser
XYZCommandParser ..> ArgumentMultimap
XYZCommandParser ..> ArgumentTokenizer
ArgumentTokenizer .left.> ArgumentMultimap
XYZCommandParser ..> CliSyntax
CliSyntax ..> Prefix
XYZCommandParser ..> ParserUtil
ParserUtil .down.> Prefix
ArgumentTokenizer .down.> Prefix
XYZCommand -up-|> Command
LogicManager .left.> Command : executes >

LogicManager --> Storage
LogicManager --> Model
Command .right.> Model
note right of XYZCommand: XYZCommand = AddTaskCommand, \nFindTasksCommand, etc

Logic ..> CommandResult
LogicManager .down.> CommandResult
Command .up.> CommandResult
CommandResult -[hidden]-> Parser
@enduml
