@startuml
!include style.puml

box Logic LOGIC_COLOR_T1
participant ":LogicManager" as LogicManager LOGIC_COLOR
participant ":TuitioneParser" as TuitioneParser LOGIC_COLOR
participant "fp:FilterCommandParser" as FilterCommandParser LOGIC_COLOR
participant "f:FilterCommand" as FilterCommand LOGIC_COLOR
participant ":CommandResult" as CommandResult LOGIC_COLOR
end box

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

[-> LogicManager : execute("filter g/S2 s/English")
activate LogicManager

LogicManager -> TuitioneParser : parseCommand("filter g/S2 s/English")
activate TuitioneParser

create FilterCommandParser
TuitioneParser -> FilterCommandParser
activate FilterCommandParser

FilterCommandParser --> TuitioneParser
deactivate FilterCommandParser

TuitioneParser -> FilterCommandParser : parse("g/S2 s/English")
activate FilterCommandParser

create FilterCommand
FilterCommandParser -> FilterCommand
activate FilterCommand

FilterCommand --> FilterCommandParser : f
deactivate FilterCommand

FilterCommandParser --> TuitioneParser : f
deactivate FilterCommandParser
FilterCommandParser -[hidden]-> TuitioneParser
destroy FilterCommandParser


TuitioneParser --> LogicManager : f
deactivate TuitioneParser

LogicManager -> FilterCommand : execute(m)
activate FilterCommand

FilterCommand -> Model
activate Model
alt "grade != null"
    Model -> Model : filter student and lesson list by grade
else "subject != null"
    Model -> Model : filter lesson list by subject

else "grade != null && subject != null"
    Model -> Model : filter student list by subject, filter lesson list by subject and grade
end

Model --> FilterCommand : student and lesson lists filtered
deactivate Model

create CommandResult
FilterCommand -> CommandResult
activate CommandResult

CommandResult --> FilterCommand
deactivate CommandResult

FilterCommand --> LogicManager : commandResult
deactivate FilterCommand
FilterCommand -[hidden]-> LogicManager

[<--LogicManager
deactivate LogicManager
@enduml
