@startuml
actor User
boundary "RecommendationFragment"
participant "RecommendationAdapter"
control "RecommendationPresenter"
entity  "AccountUser"
collections "UsersEntity"
participant "GetRecommendationUseCase"
participant "SessionDataRepository"

activate User
"User" -> "RecommendationFragment": onClick()
activate RecommendationFragment

"RecommendationFragment" -> "RecommendationPresenter": loadRecommendations()
activate RecommendationPresenter
"RecommendationPresenter" ->> "GetRecommendationUseCase": execute()
activate GetRecommendationUseCase

"GetRecommendationUseCase" -> "GetRecommendationUseCase": getUseCaseObservable()
activate GetRecommendationUseCase #DarkSalmon
deactivate GetRecommendationUseCase #DarkSalmon

"GetRecommendationUseCase" -> "SessionDataRepository": getRecommendationUsers()
activate SessionDataRepository

"SessionDataRepository" -> "SessionDataRepository": getRecommendations()
activate SessionDataRepository #DarkSalmon
deactivate SessionDataRepository #DarkSalmon

create "UsersEntity"
"SessionDataRepository" --> "UsersEntity": create
"SessionDataRepository" <-- "UsersEntity":

"GetRecommendationUseCase" <- "SessionDataRepository": users
deactivate SessionDataRepository


"RecommendationPresenter" <-- "GetRecommendationUseCase": users
deactivate GetRecommendationUseCase
loop for each in UsersEntity
create "AccountUser"
"RecommendationPresenter" --> "AccountUser": create
"RecommendationPresenter" <-- "AccountUser":
activate AccountUser
"RecommendationPresenter" -> "AccountUser": setId()
"RecommendationPresenter" <-- "AccountUser":
"RecommendationPresenter" -> "AccountUser": setLanguage()
"RecommendationPresenter" <-- "AccountUser":
"RecommendationPresenter" -> "AccountUser": setLevel()
"RecommendationPresenter" <-- "AccountUser":
"RecommendationPresenter" -> "AccountUser": setFirstName()
"RecommendationPresenter" <-- "AccountUser":
"RecommendationPresenter" -> "AccountUser": setLastName()
"RecommendationPresenter" <-- "AccountUser":
"RecommendationPresenter" -> "AccountUser": setEstimate()
"RecommendationPresenter" <-- "AccountUser":
deactivate AccountUser
end

"RecommendationFragment" <- "RecommendationPresenter": showRecommendations()
deactivate RecommendationPresenter

"RecommendationFragment" -> "RecommendationAdapter": showItems()
activate RecommendationAdapter
"RecommendationFragment" <-- "RecommendationAdapter":
deactivate RecommendationAdapter


"RecommendationFragment" --> "User":
deactivate RecommendationFragment

deactivate User

@enduml