@startuml
skinparam monochrome true
skinparam packageStyle rectangle
skinparam shadowing false

autonumber

actor "Green Spaces Manager" as GSM
participant ":AddEntryToAgendaUI" as UI
participant ":AddEntryToAgentaController" as CTR
participant ":AgendaController" as AgendaController
participant ":Repositories" as Repositories
participant "repositories:\nRepositories" as RepositoriesInstance
participant "toDoListRepository:\nToDoListRepository" as ToDoListRepository
participant "agendaRepository:\nAgendaRepository" as AgendaRepository

activate GSM

    GSM -> UI : asks to add a new entry in the AgendaEntry

    activate UI

        UI -> CTR** : create()

        UI -> CTR : getToDoList()
        activate CTR

            CTR -> Repositories : getInstance()
            activate Repositories

                Repositories --> CTR : instance
            deactivate Repositories

            CTR -> RepositoriesInstance : getToDoListRepository()
            activate RepositoriesInstance

                RepositoriesInstance --> CTR : toDoListRepository
            deactivate RepositoriesInstance

            CTR -> ToDoListRepository : getToDoList(email)
            activate ToDoListRepository

                ToDoListRepository --> CTR : toDoList
            deactivate ToDoListRepository

            CTR --> UI : toDoList
        deactivate CTR

        UI -> GSM : asks to select a task and asks the status and the \nexpected duration
deactivate UI
        GSM -> UI : selects an entry, inputs expected duration and status
activate UI

        UI -> AgendaController** : create
        UI -> AgendaController : createAgendaEntry(selectedEntry, expectedDuration, status)
        activate AgendaController

            AgendaController -> Repositories : getInstance()
            activate Repositories

                Repositories --> AgendaController : instance
            deactivate Repositories

            AgendaController -> RepositoriesInstance : getAgendaRepository()
            activate RepositoriesInstance

                RepositoriesInstance --> AgendaController : agendaRepository
            deactivate RepositoriesInstance

            AgendaController -> AgendaRepository : addAgendaEntry(selectedEntry, expectedDuration, status)
            activate AgendaRepository

                AgendaRepository --> AgendaEntry : addEntry(selectedEntry, expectedDuration, status)
                            activate AgendaEntry

                                AgendaEntry --> AgendaEntry : validateEntry()

                                AgendaEntry --> AgendaEntry : addEntry(selectedEntry, expectedDuration, status)

                                AgendaEntry --> AgendaRepository : agendaEntry
                            deactivate AgendaEntry
                AgendaRepository --> AgendaController : agendaEntry
            deactivate AgendaRepository

            AgendaController --> UI : agendaEntry
        deactivate AgendaController

        UI --> GSM : displays operation success
    deactivate UI
deactivate GSM
@enduml