@startuml
!include style.puml

box Logic LOGIC_COLOR_T1
participant ":LogicManager" as LogicManager LOGIC_COLOR
participant ":AddressBookParser" as AddressBookParser LOGIC_COLOR
participant ":CalculateCommandParser" as CalculateCommandParser LOGIC_COLOR
participant "d:CalculateCommand" as CalculateCommand LOGIC_COLOR
participant ":CommandResult" as CommandResult LOGIC_COLOR
end box

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

[-> LogicManager : execute("calculate 22/03/2022")
activate LogicManager

LogicManager -> AddressBookParser : parseCommand("calculate 22/03/2022")
activate AddressBookParser

create CalculateCommandParser
AddressBookParser -> CalculateCommandParser
activate CalculateCommandParser

CalculateCommandParser --> AddressBookParser
deactivate CalculateCommandParser

AddressBookParser -> CalculateCommandParser : parse("22/03/2022")
activate CalculateCommandParser

create CalculateCommand
CalculateCommandParser -> CalculateCommand
activate CalculateCommand

CalculateCommand --> CalculateCommandParser : d
deactivate CalculateCommand

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

AddressBookParser --> LogicManager : d
deactivate AddressBookParser

LogicManager -> CalculateCommand : execute()
activate CalculateCommand

CalculateCommand -> Model : calculateCost(22/03/2022)
activate Model

Model --> CalculateCommand : totalCost
deactivate Model

create CommandResult
CalculateCommand -> CommandResult
activate CommandResult

CommandResult --> CalculateCommand
deactivate CommandResult

CalculateCommand --> LogicManager : result
deactivate CalculateCommand

[<--LogicManager
deactivate LogicManager
@enduml
