@startuml
!include style.puml

box Logic LOGIC_COLOR_T1
participant ":LogicManager" as LogicManager LOGIC_COLOR
participant ":ReeveParser" as ReeveParser LOGIC_COLOR
participant ":AttendanceCommandParser" as AttendanceCommandParser LOGIC_COLOR
participant "a:AddAttendanceCommand" as AddAttendanceCommand LOGIC_COLOR
end box

box Model MODEL_COLOR_T1
participant "updatedStudent:Student" as Student MODEL_COLOR
participant ":Model" as Model MODEL_COLOR
participant "student:Student" as oldStudent MODEL_COLOR
end box

[-> LogicManager : execute(...)
activate LogicManager

LogicManager -> ReeveParser : parseCommand(...)
activate ReeveParser

create AttendanceCommandParser
ReeveParser -> AttendanceCommandParser : AttendanceCommandParser()
activate AttendanceCommandParser

AttendanceCommandParser --> ReeveParser
deactivate AttendanceCommandParser

ReeveParser -> AttendanceCommandParser : parse(...)
activate AttendanceCommandParser

create AddAttendanceCommand
AttendanceCommandParser -> AddAttendanceCommand : AddAttendanceCommand(...)
activate AddAttendanceCommand

AddAttendanceCommand --> AttendanceCommandParser : a
deactivate AddAttendanceCommand

AttendanceCommandParser --> ReeveParser : a
deactivate AttendanceCommandParser

AttendanceCommandParser -[hidden]> ReeveParser
destroy AttendanceCommandParser

ReeveParser --> LogicManager : a
deactivate ReeveParser

LogicManager -> AddAttendanceCommand : execute(...)
activate AddAttendanceCommand

AddAttendanceCommand -> AddAttendanceCommand : updateStudentAttendance(...)
activate AddAttendanceCommand

create Student
AddAttendanceCommand -> Student : Student(...)
activate Student

Student --> AddAttendanceCommand : updatedStudent
deactivate Student

AddAttendanceCommand --> AddAttendanceCommand : updatedStudent
deactivate AddAttendanceCommand

AddAttendanceCommand -> Model : setStudent(student, updatedStudent)
activate Model

Model --> AddAttendanceCommand
deactivate Model

destroy oldStudent

AddAttendanceCommand --> LogicManager : result
deactivate AddAttendanceCommand

AddAttendanceCommand -[hidden]> LogicManager
destroy AddAttendanceCommand

[<-- LogicManager : result
deactivate LogicManager
@enduml
