using CoreLibrary.Events;
using CoreLibrary.Joueurs;
using CoreLibrary.Persistance;
using System.Collections.Generic;

namespace CoreLibrary.Manager
{
    public class Manageur  
    {
        private readonly List<Joueur> joueurs;
        private readonly List<Partie> parties;
        private readonly IPersistance persistance;
        private Partie? partie;

        public IReadOnlyCollection<Joueur> Joueurs => joueurs;
        public IReadOnlyCollection<Partie> Parties => parties;
        public Partie? Partie => partie;

        public Manageur(IPersistance persistance)
        { 
            this.persistance = persistance;
            joueurs = persistance.Charger<Joueur>().ToList();
            parties = persistance.Charger<Partie>().ToList();
        }   

        public void NouvellePartie(Partie partie)
        {
            this.partie = partie;

            parties.Add(partie);

            partie.PasserMain += (object? sender, PasserMainEventArgs e) =>
            {
                persistance.Enregistrer<Partie>(parties.ToArray());
                persistance.Enregistrer<Joueur>(joueurs.ToArray());
            };

            partie.PartieTerminee += (object? sender, PartieTermineeEventArgs e) =>
            {
                persistance.Enregistrer<Partie>(parties.ToArray());
                persistance.Enregistrer<Joueur>(joueurs.ToArray());
            };
        }

        public Joueur DemanderJoueur(string nom)
        {
            foreach (Joueur joueur in joueurs)
            {
                if (joueur.Nom == nom)
                    return joueur;
            }
            Joueur nouveauJoueur = new Joueur(nom);
            joueurs.Add(nouveauJoueur);
            return nouveauJoueur;
        }
    }
}
