using Models.Events;
using Models.Jeux.Plateau;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Models.Jeux
{
    public class Joueur
    {
        /// <summary>
        /// Evénement affichant le nom d'un joueur
        /// </summary>
        public event EventHandler<ShowingPlayerNameEventArgs> ShowingPlayerName;

        protected virtual void OnShowingPlayerName(Joueur j)
        {
            ShowingPlayerName?.Invoke(this, new ShowingPlayerNameEventArgs(j));
        }

        /// <summary>
        /// Eévenement permettant de donner un nomà un joueur
        /// </summary>
        public event EventHandler<EnterPlayerNameEventArgs> EnterPlayerName;

        protected virtual void OnEnterPlayerName(Joueur joueur)
        {
            EnterPlayerName?.Invoke(this,new EnterPlayerNameEventArgs(joueur));
        }

        /// <summary>
        /// Constructeur de la classe joueur 
        /// </summary>
        /// <param name="name">Objet name de type string correspondant au nom  du joueur</param>
        /// <param name="couleur">Objet couleur de type Couleur correspondant à la couleur des pions du joueur </param>
        public Joueur(string name, Couleur couleur) 
        {
            Nom = name;
            NbPions = 0; 
            couleurDePion = couleur;

        }

        public Joueur() 
        {
            Nom = "TOTO";
            NbPions = 0;
            
        }


        /// <summary>
        /// Crée le getter et le setter de l'attribut Nom
        /// </summary>
        public string Nom
        {
            get
            {
                return nom;
            }
            set 
            {
                if(value != null) 
                {
                    nom = value;
                }
                else
                    nom = "Invité";
            }
        }

        private string nom;

        /// <summary>
        /// Crée le getter et le setter de l'attribut Nbpions qui correspond au nombre de pions pris à 
        /// l'adversaire
        /// </summary>
        public int NbPions
        {
            get
            {
                return nbPions;
            }
            set
            { 
                nbPions = value; 
            }
        }

        private int nbPions;

        /// <summary>
        /// Crée le getter et le setter de l'attribut Couleur de pion
        /// </summary>
        public Couleur CouleurDePion
        {
            get
            {
                return couleurDePion;
            }

            set
            {
                couleurDePion = value;
            }
        }
        private Couleur couleurDePion;

        /// <summary>
        /// Appelle l'événement affichant le nom du joueur
        /// </summary>
        public void AfficherPlayerName()
        {
            OnShowingPlayerName(this);
        }

        /// <summary>
        /// Appelle l'événement permettant de nommer le joueur
        /// </summary>
        public void EntrerPlayerName()
        {
            OnEnterPlayerName(this);
        }

    }
}


