@startuml
skinparam monochrome true
skinparam packageStyle rectangle
skinparam shadowing false

autonumber

'hide footbox
actor "Unregister user" as USER
participant ":DisplayPropertiesUI" as UI
participant ":DisplayPropertiesController" as CTRL
participant ":Repositories" as PLAT
participant ":PropertiesRepositories" as PR
participant ":PropertyCharacteristicsRepository" as CharacteristicsRepository


activate USER

USER -> UI : requests for listed properties

        activate UI

            UI -> CTRL** : create

            UI -> CTRL : getListedProperties()
            activate CTRL

                CTRL --> PR : getPropertiesRepository()
                activate PR

                PR --> CTRL: repositories
                deactivate PR


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

                CTRL --> UI : listedProperties

            deactivate CTRL

        UI --> USER : displays listed properties, most recent to least
    deactivate UI

    USER -> UI : selects option to specify according to filters
    activate UI

    UI ---> CTRL : getListedProperties()
    activate CTRL
                CTRL--->PLAT : getinstance()
                activate PLAT

                PLAT --> CTRL: repositories
                deactivate PLAT

                CTRL ---> CharacteristicsRepository : getPropertiesCharacteristics()
                activate CharacteristicsRepository

                CharacteristicsRepository --> CTRL : listedProperties
                deactivate CharacteristicsRepository

                CTRL --> UI : listedProperties
    deactivate CTRL

        UI --> USER : shows property options (type of property, number of rooms)
    deactivate UI

    USER -> UI : selects the type of property and number of rooms
    activate UI

    UI ---> CTRL : getListedProperties()
        activate CTRL
                    CTRL--->PLAT : getinstance()
                    activate PLAT

                    PLAT --> CTRL: repositories
                    deactivate PLAT

                    CTRL ---> CharacteristicsRepository : getPropertiesCharacteristics()
                    activate CharacteristicsRepository

                    CharacteristicsRepository --> CTRL : listedProperties
                    deactivate CharacteristicsRepository

                    CTRL --> UI : listedProperties
        deactivate CTRL

            UI --> USER: allows to sort by filters (price`s range, city and state)
    deactivate UI

        USER -> UI : selects price and location
    activate UI

    UI ---> CTRL : getListedProperties()
        activate CTRL
                    CTRL--->PR : getinstance()
                    activate PR

                    PR --> CTRL: repositories
                    deactivate PR

                    CTRL --> UI : listedProperties
        deactivate CTRL


        UI --> USER : show filtered list
    deactivate UI

        USER -> UI : chooses the property
    activate UI

        UI --> USER : displays property information
    deactivate UI



deactivate USER

@enduml