@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 ":DeliveryStatusCommandParser" as DeliveryStatusCommandParser LOGIC_COLOR
participant "d:DeliveryStatusCommand" as DeliveryStatusCommand LOGIC_COLOR
participant "result:CommandResult" as CommandResult LOGIC_COLOR
end box

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

[-> LogicManager : execute(input)
activate LogicManager

LogicManager -> AddressBookParser : parseCommand(input)
activate AddressBookParser

create DeliveryStatusCommandParser
AddressBookParser -> DeliveryStatusCommandParser
activate DeliveryStatusCommandParser

DeliveryStatusCommandParser --> AddressBookParser
deactivate DeliveryStatusCommandParser

AddressBookParser -> DeliveryStatusCommandParser : parse(args)
activate DeliveryStatusCommandParser

create DeliveryStatusCommand
DeliveryStatusCommandParser -> DeliveryStatusCommand
activate DeliveryStatusCommand

DeliveryStatusCommand --> DeliveryStatusCommandParser : d
deactivate DeliveryStatusCommand

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

AddressBookParser --> LogicManager : d
deactivate AddressBookParser

LogicManager -> DeliveryStatusCommand : execute(model)
activate DeliveryStatusCommand

DeliveryStatusCommand -> Model : getUserLoginStatus()
activate Model

Model --> DeliveryStatusCommand : userLoginStatus
deactivate Model

DeliveryStatusCommand -> Model : getDelivery(targetId)
activate Model

Model --> DeliveryStatusCommand : Delivery
deactivate Model

DeliveryStatusCommand -> DeliveryStatusCommand : createDeliveryWithNewStatus(deliveryToEdit, newStatus)
activate DeliveryStatusCommand

DeliveryStatusCommand --> DeliveryStatusCommand :editedDelivery
deactivate DeliveryStatusCommand

DeliveryStatusCommand -> Model : setDelivery(target, editedDelivery)
activate Model

Model --> DeliveryStatusCommand
deactivate Model

create CommandResult
DeliveryStatusCommand -> CommandResult
activate CommandResult

CommandResult --> DeliveryStatusCommand : result
deactivate CommandResult

DeliveryStatusCommand --> LogicManager : result
deactivate DeliveryStatusCommand

DeliveryStatusCommand -[hidden]-> LogicManager
destroy DeliveryStatusCommand

[<--LogicManager : result
deactivate LogicManager

@enduml
