@startuml
skinparam monochrome true
skinparam packageStyle rectangle
skinparam shadowing false

autonumber

'hide footbox
actor "Green Spaces Manager" as GSM
participant ":AddAgendaEntryUI" as UI
participant ":AddAgendaEntryController" as CTRL
participant "ToDoRepository" as TDR
participant "AgendaRepository" as AR
participant ":Repositories" as RepositorySingleton
participant "repositories\n:Repositories" as PLAT
participant "entry\n:Entry" as ENTRY
participant "task\n:Task" as TASK
participant "greenSpace\n:GreenSpace" as GS
participant "ListMapper" as LM
participant "EntryDTO" as EDTO
participant "appSession\n:ApplicationSession" as APP
participant "currentSession\n:UserSession" as SESSAO

GSM -> UI : asks to add an entry to the Agenda

activate UI
        UI -> CTRL: getToDoEntries()
        activate CTRL

            CTRL -> RepositorySingleton : getInstance()
            activate RepositorySingleton
                RepositorySingleton --> CTRL: repositories
            deactivate RepositorySingleton

            CTRL -> PLAT: getToDoRepository
            activate PLAT
                PLAT --> CTRL: toDoRepository
            deactivate PLAT

            CTRL -> LM: toDTO(toDoEntries)
            activate LM

            loop for each entry in entries

                LM -> LM: entry = get(i)

                LM -> LM: entryDTO = toDTO(entry)
            activate LM

                LM --> EDTO**: create(entry)
            deactivate LM

                LM -> LM: toDoEntriesDTO = add(entryDTO)
            end

                LM --> CTRL: toDoEntriesDTO
            deactivate LM

            CTRL --> UI: toDoEntriesDTO

        deactivate CTRL

    UI --> GSM : shows list  of entries in the to-do list \n asks to select one
deactivate UI


GSM -> UI : selects entry
activate UI

    UI --> GSM : requests data(startDate)
deactivate UI


GSM -> UI : types data
activate UI

    UI --> GSM : requests confirmation
deactivate UI




GSM -> UI : confirms operation
activate UI

UI -> CTRL: addAgendaEntry(entryDTO, startDate)
activate CTRL
    CTRL -> TDR: getEntryByName(entryDTO.name)
    activate TDR
        TDR --> CTRL: entry
    deactivate TDR

    CTRL -> ENTRY: getGreenSpace()
    activate ENTRY
        ENTRY --> CTRL: greenSpace
    deactivate ENTRY

    CTRL -> CTRL: validateCurrentUser(greenSpace)
    activate CTRL

        CTRL -> _APP: getInstance()
        activate _APP
            _APP --> CTRL: appSession
        deactivate _APP

        CTRL -> APP: getCurrentSession()
        activate APP
            APP --> CTRL: currentSession
        deactivate APP

        CTRL -> SESSAO: name = getUserEmail()
        activate SESSAO
            SESSAO --> CTRL: currentUserEmail
        deactivate SESSAO

        CTRL -> GS: getManager()
        activate GS
            GS --> CTRL: manager
        deactivate GS


    ALT currentUserEmail = manager.getEmail()
    CTRL -> CTRL: true
    deactivate CTRL


    CTRL -> ENTRY: setStartDate(startDate)
    activate ENTRY
    deactivate ENTRY

    CTRL -> ENTRY: process()
    activate ENTRY
    deactivate ENTRY

    CTRL -> AR: addEntry(entry)
    activate AR
    deactivate AR

    end

deactivate CTRL


    UI --> GSM : displays operation success
deactivate UI







@enduml