@startuml
''
'Setup skin'
''
skinparam shadowing false
skinparam monochrome true
'skinparam linetype ortho

''
' Define direction'
''
'top to bottom direction'
left to right direction

''
' Define actors'
''
actor User
actor Administrator as Admin
actor Visitor

''
' Define related actors'
''
:Admin: -|> :User:
:User: -|> :Visitor:

''
' Define use-cases'
''

rectangle "Event Management" {
  usecase "Delete event" as event_delete
  usecase "Create event" as event_create
}

rectangle "Participation" {
  usecase "List events" as event_list

  usecase "Filter/Show future events" as event_list_future
  usecase "Filter/Show past events" as event_list_past
  usecase "Filter/Show all events" as event_list_all
  usecase "Filter/Show confirmed events" as event_list_confirmed
  usecase "Filter/Show declined events" as event_list_declined

  usecase "Confirm participation" as event_participation_confirm
  usecase "Decline participation" as event_participation_decline
  note as event_participation_type_note
    Participation type can be either:
    - UNKNOWN (default)
    - NONE
    - TO_CONFIRM
    - CONFIRMED
  end note
  (event_participation_confirm) .. event_participation_type_note
  (event_participation_decline) .. event_participation_type_note

  usecase "Set participation content" as event_participation_content_set
  note right of (event_participation_content_set)
    Either:
    - TEXT (default)
    - MUSIC
    - COMMENT
  end note
    
  usecase "Set participation location" as event_participation_location_set
  note right of (event_participation_location_set)
    Either
    - LOCATION_REMOTE (default)
    - LOCATION_STUDIO
  end note

  usecase "Set participation metadata" as event_participation_metadata_set
  note right of (event_participation_metadata_set)
    Metadata (author, title, etc)
  end note

  usecase "View incomplete tasks\nfor next events" as task_list_incomplete
  note right of (task_list_incomplete)
    Examples: 
    - missing details, 
    - missing subscription information
  end note
}

rectangle "Public pages" {
    usecase "Access to public pages (?)" as static_read
}


''
' Link actors with use-cases and related use-cases'
''

:Visitor: --> (static_read)

:User: --> (event_list)
(event_list) --> (event_list_future)
(event_list) --> (event_list_past)
(event_list) --> (event_list_all)
(event_list) --> (event_list_confirmed)
(event_list) --> (event_list_declined)

:User: --> (event_participation_confirm)
(event_participation_confirm) --> (event_participation_location_set)
(event_participation_confirm) --> (event_participation_content_set)
(event_participation_confirm) --> (event_participation_metadata_set)
:User: --> (event_participation_decline)

:User: --> (task_list_incomplete)


:Admin: --> (event_create)
:Admin: --> (event_delete)


@enduml