@startuml
!include style.puml
skinparam ArrowFontStyle plain

box Logic LOGIC_COLOR_T1
participant ":LogicManager" as LogicManager LOGIC_COLOR
participant ":AddressBookParser" as AddressBookParser LOGIC_COLOR
participant ":MarkCommandParser" as MarkCommandParser LOGIC_COLOR
participant "a:MarkCommand" as MarkCommand LOGIC_COLOR
participant "r:CommandResult" as CommandResult LOGIC_COLOR
end box

box Model MODEL_COLOR_T1
participant "m:Model" as Model MODEL_COLOR
end box

[-> LogicManager : execute("mark i/T0123456A...")
activate LogicManager

LogicManager -> AddressBookParser : parseCommand("mark i/T0123456A...")
activate AddressBookParser

create MarkCommandParser
AddressBookParser -> MarkCommandParser
activate MarkCommandParser

MarkCommandParser --> AddressBookParser
deactivate MarkCommandParser

AddressBookParser -> MarkCommandParser : parse("i/T0123456A...")
activate MarkCommandParser

create MarkCommand
MarkCommandParser -> MarkCommand
activate MarkCommand

MarkCommand --> MarkCommandParser :
deactivate MarkCommand

MarkCommandParser --> AddressBookParser : a
deactivate MarkCommandParser
'Hidden arrow to position the destroy marker below the end of the activation bar.
MarkCommandParser -[hidden]-> AddressBookParser
destroy MarkCommandParser

AddressBookParser --> LogicManager : a
deactivate AddressBookParser

LogicManager -> MarkCommand : execute(m)
activate MarkCommand

MarkCommand -> Model : getMatchingAppointment(targetNric, targetDate, targetStartTime)
activate Model
Model --> MarkCommand
MarkCommand -> Model : setAppointment(appointment, markedAppointment)
Model --> MarkCommand
deactivate Model

create CommandResult
MarkCommand -> CommandResult
activate CommandResult

CommandResult --> MarkCommand
deactivate CommandResult

MarkCommand --> LogicManager : r
deactivate MarkCommand

[<--LogicManager
deactivate LogicManager
@enduml
