package com.example.boidelov3.data;

import android.os.Parcel;
import android.os.Parcelable;

/**
 * Classe pour suivre les statistiques d'un joueur pendant une partie.
 *
 * <p>Cette classe est Parcelable pour pouvoir être passée entre les activités.
 * Elle tracke deux types de statistiques :</p>
 * <ul>
 *   <li>{@code gorgeesBuves} : Nombre total de gorgées bues par le joueur</li>
 *   <li>{@code gorgeesDistribuees} : Nombre total de gorgées distribuées par le joueur</li>
 * </ul>
 *
 * <p>Exemple d'utilisation :</p>
 * <pre>{@code
 * PlayerStats stats = new PlayerStats("Alice");
 * stats.addGorgeesBuves(5);
 * stats.addGorgeesDistribuees(3);
 * int total = stats.getTotalGorgees(); // 8
 * }</pre>
 *
 * <p>SECURITY NOTE:</p>
 * Cette classe stocke des statistiques de jeu (gorgées, scores) qui ne sont PAS
 * considérées comme des données sensibles. Aucun chiffrement n'est nécessaire.
 *
 * Si cette classe était étendue pour stocker des données personnelles (noms réels,
 * emails, etc.), il faudrait utiliser :
 * <ul>
 *   <li>AndroidX Security Library pour le chiffrement</li>
 *   <li>EncryptedSharedPreferences pour le stockage persistant</li>
 * </ul>
 */
public class PlayerStats implements Parcelable {
    private String playerName;
    private int gorgeesBuves;      // Nombre de gorgées bues par ce joueur
    private int gorgeesDistribuees; // Nombre de gorgées distribuées par ce joueur

    /**
     * Crée les statistiques pour un joueur.
     * Initialise les compteurs à zéro.
     *
     * @param playerName Le nom du joueur
     */
    public PlayerStats(String playerName) {
        this.playerName = playerName;
        this.gorgeesBuves = 0;
        this.gorgeesDistribuees = 0;
    }

    // Constructor for Parcelable
    protected PlayerStats(Parcel in) {
        playerName = in.readString();
        gorgeesBuves = in.readInt();
        gorgeesDistribuees = in.readInt();
    }

    public static final Creator<PlayerStats> CREATOR = new Creator<PlayerStats>() {
        @Override
        public PlayerStats createFromParcel(Parcel in) {
            return new PlayerStats(in);
        }

        @Override
        public PlayerStats[] newArray(int size) {
            return new PlayerStats[size];
        }
    };

    /**
     * Retourne le nom du joueur.
     * @return Le nom du joueur
     */
    public String getPlayerName() {
        return playerName;
    }

    /**
     * Retourne le nombre de gorgées bues par ce joueur.
     * @return Le nombre de gorgées bues
     */
    public int getGorgeesBuves() {
        return gorgeesBuves;
    }

    /**
     * Retourne le nombre de gorgées distribuées par ce joueur.
     * @return Le nombre de gorgées distribuées
     */
    public int getGorgeesDistribuees() {
        return gorgeesDistribuees;
    }

    /**
     * Ajoute des gorgées bues au total du joueur.
     *
     * @param count Le nombre de gorgées à ajouter (peut être négatif)
     */
    public void addGorgeesBuves(int count) {
        this.gorgeesBuves += count;
    }

    /**
     * Ajoute des gorgées distribuées au total du joueur.
     *
     * @param count Le nombre de gorgées à ajouter (peut être négatif)
     */
    public void addGorgeesDistribuees(int count) {
        this.gorgeesDistribuees += count;
    }

    /**
     * Retourne le total des gorgées (buves + distribuées).
     *
     * @return La somme des gorgées bues et distribuées
     */
    public int getTotalGorgees() {
        return gorgeesBuves + gorgeesDistribuees;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(playerName);
        dest.writeInt(gorgeesBuves);
        dest.writeInt(gorgeesDistribuees);
    }
}
