@startuml
!include style.puml

box Logic LOGIC_COLOR_T1
participant ":LogicManager" as LogicManager LOGIC_COLOR
participant ":SocheduleParser" as SocheduleParser LOGIC_COLOR
participant ":UndoneTaskCommandParser" as UndoneTaskCommandParser LOGIC_COLOR
participant "u:UndoneTaskCommand" as UndoneTaskCommand LOGIC_COLOR
participant ":CommandResult" as CommandResult LOGIC_COLOR
end box

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

[-> LogicManager : parse("undone_task 1")
activate LogicManager

LogicManager -> SocheduleParser : parseCommand("undone_task 1")
activate SocheduleParser

create UndoneTaskCommandParser
SocheduleParser -> UndoneTaskCommandParser
activate UndoneTaskCommandParser
UndoneTaskCommandParser --> SocheduleParser
deactivate UndoneTaskCommandParser

SocheduleParser -> UndoneTaskCommandParser: parse("1")
activate UndoneTaskCommandParser

create UndoneTaskCommand
UndoneTaskCommandParser -> UndoneTaskCommand
activate UndoneTaskCommand
UndoneTaskCommandParser <--UndoneTaskCommand : u
deactivate UndoneTaskCommand

SocheduleParser <--UndoneTaskCommandParser : u
deactivate UndoneTaskCommandParser
'Hidden arrow to position the destroy marker below the end of the activation bar.
UndoneTaskCommandParser -[hidden]->[
destroy UndoneTaskCommandParser

LogicManager <-- SocheduleParser : u
deactivate SocheduleParser

LogicManager -> UndoneTaskCommand : execute()
activate UndoneTaskCommand

UndoneTaskCommand -> Model : setTask(taskToUndone, uncompletedTask)
activate Model
UndoneTaskCommand <-- Model
deactivate Model

UndoneTaskCommand -> Model : updateFilteredTaskList(...)
activate Model
UndoneTaskCommand <-- Model
deactivate Model

create CommandResult
UndoneTaskCommand -> CommandResult
activate CommandResult
UndoneTaskCommand <-- CommandResult
deactivate CommandResult

LogicManager <-- UndoneTaskCommand: result
deactivate UndoneTaskCommand
'Hidden arrow to position the destroy marker below the end of the activation bar.
UndoneTaskCommand -[hidden]->[

[<-- LogicManager :
@enduml
