@startuml
skinparam monochrome true
skinparam packageStyle rectangle
skinparam shadowing false

autonumber
title Sequence Diagram Full - US001

'hide footbox
actor "Unregistered User" as UU
participant ":ListPropertiesUI" as UI
participant ":ListPropertiesController" as CTRL
participant ":Repositories" as RepositorySingleton
participant "repositories\n:Repositories" as PLAT
participant "propertyRepository:\nPropertyRepository" as TaskCategoryRepository

activate UU

        UU -> UI : I want to list properties

        activate UI

            UI -> CTRL** : list

            UI -> CTRL : getTypeOfProperty()
            activate CTRL

                CTRL -> RepositorySingleton : getInstance()
                activate RepositorySingleton

                    RepositorySingleton --> CTRL: repositories
                deactivate RepositorySingleton

                CTRL -> PLAT : getPropRepository()
                activate PLAT

                    PLAT --> CTRL: propRepository
                deactivate PLAT

                CTRL -> PropRepository : getTpProperty(typeOfProperty,description)
                activate PropRepository

                    PropRepository --> CTRL : propList
                deactivate PropRepository

                CTRL --> UI : propList

                 CTRL -> PLAT : getBusRepository()
                 activate PLAT

                     PLAT --> CTRL: busRepository
                 deactivate PLAT

                 CTRL -> BusRepository : getTpBusiness(typeOfBusiness,description)
                 activate BusRepository

                     BusRepository --> CTRL : busList
                 deactivate BusRepository

                 CTRL --> UI : busList
            deactivate CTRL

            UI --> UU :Ask to fill the attributes (business, property, rooms)
        deactivate UI

    UU -> UI : Set attributes and send data
    activate UI

        UI --> UU :show attributes and ask to confirm
    deactivate UI

    UU -> UI : Confirm data
    activate UI
  UI -> CTRL** : list

            UI -> CTRL : getPropertyByNBedTpBusTyProp()
            activate CTRL

                CTRL -> RepositorySingleton : getInstance()
                activate RepositorySingleton

                    RepositorySingleton --> CTRL: repositories
                deactivate RepositorySingleton

                CTRL -> PLAT : getPropertyRepository()
                activate PLAT

                    PLAT --> CTRL: propertyRepository
                deactivate PLAT

                CTRL -> PropertyRepository : getProperty()
                activate PropertyRepository

                    PropertyRepository --> CTRL : propertyList
                deactivate PropertyRepository

                CTRL --> UI : propertyList
            deactivate CTRL
        UI --> UU :Success, show list of properties
    deactivate UI
deactivate UU

@enduml