@startuml


skinparam monochrome true
skinparam packageStyle rectangle
skinparam shadowing false
autonumber


actor "Agent" as Agent
'participant "Property" as Property
participant ":Request" as Request
participant ":AnnouncementUI" as Ui
participant ":AnnouncementController" as AnnouncementControl
participant ":PropertyRepository" as PropertyRepository
'participant ":PropertyRepository" as PropertyRepository
participant "Announcement" as Announcement
'participant "Property" as Property
participant ":Request" as Request

'Sequence
activate Agent

    Agent -> Ui : start new announcement
    activate Ui

        Ui --> AnnouncementControl : getPendingOrderList()
        activate AnnouncementControl

            AnnouncementControl --> PropertyRepository : getPendingOrderList()
                    activate PropertyRepository

                        PropertyRepository --> AnnouncementControl :  pendingOrderList
                    deactivate PropertyRepository
            AnnouncementControl --> Ui :  pendingOrderList
        deactivate AnnouncementControl


        Ui --> Agent : shows pending order list and ask to select one
    deactivate Ui

    Agent -> Ui : choose order

    activate Ui

        Ui --> PropertyRepository : getProperty(id)
    activate PropertyRepository

        PropertyRepository --> Ui : property
    deactivate PropertyRepository

        Ui --> Agent : show property data and ask commission  (fix or variable)
    deactivate Ui

    Agent -> Ui : choose commission (fix or variable)
    activate Ui

        Ui --> Ui : validates data integrity(e.g. boolean  is boolean)
        Ui --> Agent : request commission value

    deactivate Ui
      Agent -> Ui : choose value
        activate Ui

            Ui --> Ui : validates data integrity(e.g. double  is double)
            Ui --> Agent : show all data and requests confirmation

        deactivate Ui
    Agent -> Ui : confirm the data

    'Client --> UI : validates data
    activate Ui

        Ui --> AnnouncementControl : createAnnounce("all data submited")
        activate AnnouncementControl

            AnnouncementControl --> Announcement : validateAnnoucement("announcement data submited")

            activate Announcement


                Announcement --> AnnouncementControl : return validateAnnoucement("announcement data submited") feedback
            deactivate Announcement

            AnnouncementControl --> Request : createRequest("all data submited")

        deactivate AnnouncementControl

        Ui --> Agent : validates submission
    deactivate Ui

deactivate Agent

@enduml

