@startuml
!include ../../style.puml

box Logic LOGIC_COLOR_T1
participant ":LogicManager" as LogicManager LOGIC_COLOR
participant ":SudoHrParser" as SudoHrParser LOGIC_COLOR
participant ":RemoveEmployeeFromDepartmentCommandParser" as RemoveEmployeeFromDepartmentCommandParser LOGIC_COLOR
participant ":Id" as Id LOGIC_COLOR
participant ":DepartmentName" as DepartmentName LOGIC_COLOR
participant "department:Department" as Department LOGIC_COLOR
participant "RemoveEmployeeFromDepartmentCommand" as RemoveEmployeeFromDepartmentCommand 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("refd eid/100 n/Software Engineering")
activate LogicManager

LogicManager -> SudoHrParser : parseCommand("refd eid/100 n/Software Engineering")
activate SudoHrParser

create RemoveEmployeeFromDepartmentCommandParser
SudoHrParser -> RemoveEmployeeFromDepartmentCommandParser
activate RemoveEmployeeFromDepartmentCommandParser

RemoveEmployeeFromDepartmentCommandParser --> SudoHrParser
deactivate RemoveEmployeeFromDepartmentCommandParser

SudoHrParser -> RemoveEmployeeFromDepartmentCommandParser : parse("eid/100 n/Software Engineering")
activate RemoveEmployeeFromDepartmentCommandParser

create Id
RemoveEmployeeFromDepartmentCommandParser -> Id
activate Id

Id -> RemoveEmployeeFromDepartmentCommandParser
deactivate

create DepartmentName
RemoveEmployeeFromDepartmentCommandParser -> DepartmentName
activate DepartmentName

DepartmentName -> RemoveEmployeeFromDepartmentCommandParser
deactivate

create RemoveEmployeeFromDepartmentCommand
RemoveEmployeeFromDepartmentCommandParser -> RemoveEmployeeFromDepartmentCommand
activate RemoveEmployeeFromDepartmentCommand

RemoveEmployeeFromDepartmentCommand --> RemoveEmployeeFromDepartmentCommandParser
deactivate RemoveEmployeeFromDepartmentCommand

RemoveEmployeeFromDepartmentCommandParser --> SudoHrParser
deactivate RemoveEmployeeFromDepartmentCommandParser
'Hidden arrow to position the destroy marker below the end of the activation bar.
RemoveEmployeeFromDepartmentCommandParser -[hidden]-> SudoHrParser
destroy RemoveEmployeeFromDepartmentCommandParser

SudoHrParser --> LogicManager
deactivate SudoHrParser

LogicManager -> RemoveEmployeeFromDepartmentCommand : execute()
activate RemoveEmployeeFromDepartmentCommand

RemoveEmployeeFromDepartmentCommand -> Model : getEmployee(toRemove)
activate Model

Model --> RemoveEmployeeFromDepartmentCommand
deactivate Model

RemoveEmployeeFromDepartmentCommand -> Model : getDepartment(departmentName)
activate Model

Model --> RemoveEmployeeFromDepartmentCommand
deactivate Model

RemoveEmployeeFromDepartmentCommand -> Department : hasEmployee(employee)
activate Department

Department --> RemoveEmployeeFromDepartmentCommand
deactivate Department

RemoveEmployeeFromDepartmentCommand -> Department : removeEmployee(employee)
activate Department

Department --> RemoveEmployeeFromDepartmentCommand
deactivate Department

create CommandResult
RemoveEmployeeFromDepartmentCommand -> CommandResult
activate CommandResult

CommandResult --> RemoveEmployeeFromDepartmentCommand
deactivate CommandResult

RemoveEmployeeFromDepartmentCommand --> LogicManager : result
deactivate RemoveEmployeeFromDepartmentCommand

[<--LogicManager
deactivate LogicManager
@enduml
