@startuml

left to right direction
actor "U1:User" as U1
actor "U2:User" as U2
actor ":Admin" as A

package chat {
    package "Gestion Utilisateur" {
        usecase connexion
        usecase changementPseudo
        usecase deconnexion
        usecase envoyerNotificationDeconnexion
        usecase envoyerNotificationConnexion
        usecase saisirPseudo
        usecase ValidationPseudo
    }

    package "Interaction" {
        usecase minimisationFenetre_iconTray
        usecase recevoirMessage
        usecase recevoirFichier
        usecase envoyerMessage
        usecase envoyerFichier
    }
    
    package "Affichage" {
        usecase voirMessage
        usecase lireHistorique
        usecase lireListeUtilisateurs
        usecase voirUtilisateurs
    }

    package "Configuration" {
        usecase mettreFichierSurMachine
        usecase creerRaccourci
    }

    
    usecase lireBaseDonneeUtilisateur
    usecase horodatage
    usecase remplirBaseDonneeUtilisateur
    
}

envoyerNotificationConnexion --- U2
envoyerNotificationDeconnexion --- U2
envoyerFichier ---- U2
envoyerMessage ---- U2
U2 -- recevoirFichier
U2 -- recevoirMessage

U1 --- envoyerMessage
U1 -- envoyerFichier
U1 --- recevoirMessage
U1 -- recevoirFichier
U1 -- connexion
U1 -- deconnexion
U1 -- voirMessage
U1 -- voirUtilisateurs
U1 -- minimisationFenetre_iconTray
U1 -- changementPseudo

A -- mettreFichierSurMachine
A -- creerRaccourci


recevoirMessage --> remplirBaseDonneeUtilisateur
recevoirFichier --> remplirBaseDonneeUtilisateur
lireHistorique <|-- lireBaseDonneeUtilisateur
voirUtilisateurs <|-- lireListeUtilisateurs
lireListeUtilisateurs <|-- lireBaseDonneeUtilisateur
connexion <|-- saisirPseudo
connexion --> envoyerNotificationConnexion
changementPseudo <|-- saisirPseudo
saisirPseudo --> ValidationPseudo
deconnexion --> envoyerNotificationDeconnexion
voirMessage <|-- lireHistorique
voirMessage <|-- horodatage
envoyerFichier --> horodatage
envoyerMessage --> horodatage

@enduml