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

namespace Models
{
    public class Display
    {

        public void AfficherPlateau(object sender, ShowingBoardEventArgs args) 
        {
            int cpt = 0;
            Console.WriteLine(" 0  1  2  3  4  5  6  7  8  9");
            foreach (var item in args.p.ListeCases)
            {

                if (item.Pion == false)
                {
                    Console.Write("[ ]");

                }
                else
                {
                    foreach (var pion in args.p.ListePions)
                    {

                        if (item == pion.Pos && pion is Dame && pion.CouleurPion == Couleur.BLANC)
                        {
                            Console.Write("[X]");
                        }
                        if (item == pion.Pos && pion is Dame && pion.CouleurPion == Couleur.NOIR)
                        {
                            Console.Write("[Y]");
                        }
                        if (item == pion.Pos && pion is not Dame && pion.CouleurPion == Couleur.BLANC)
                        {
                            Console.Write("[+]");
                        }
                        if (item == pion.Pos && pion is not Dame && pion.CouleurPion == Couleur.NOIR)
                        {
                            Console.Write("[-]");
                        }


                    }
                }
                cpt++;
                if (cpt % 10 == 0)
                {
                    Console.WriteLine("\r");
                }
            }

        }

        public void faireCoup(object sender, MovingPawnEventArgs args)
        {
            List<string> listeVerif = ["1","2","3","4","5","6","7","8","9"];
            
            int xp=0, yp=0, xc = 0, yc = 0 ;
            string check;
            bool verif = false;
            bool verif2=false;
            bool verif3=false;
            bool verif4=false;
            bool verif5=false;

            while (verif!=true)
            {
                while(verif2!=true && verif3!=true)
                {
                    Console.WriteLine(args.j.Nom+" donnez la position du pion a deplacer(x puis y):");
                    check = Console.ReadLine();
                    if (check != null)
                    {
                        foreach(string c in listeVerif)
                        {
                            if(check==c)
                            {
                                yp = Convert.ToInt32(check);
                                verif2=true;
                            }
                        }
                        
                    }
                    check = Console.ReadLine();
                    if (check != null)
                    {
                        foreach (string c in listeVerif)
                        {
                            if (check == c)
                            {
                                xp = Convert.ToInt32(check);
                                verif3 = true;
                            }
                        }
                        
                    }
                   
                    
                }

                while (verif4 != true && verif5 != true)
                {
                    Console.WriteLine(args.j.Nom + " donnez la position de la cible(x puis y):");
                    check = Console.ReadLine();
                    if (check != null)
                    {
                        foreach (string c in listeVerif)
                        {
                            if (check == c)
                            {
                                yc = Convert.ToInt32(check);
                                verif4 = true;
                            }
                        }

                    }
                    check = Console.ReadLine();
                    if (check != null)
                    {
                        foreach (string c in listeVerif)
                        {
                            if (check == c)
                            {
                                xc = Convert.ToInt32(check);
                                verif5 = true;
                            }
                        }

                    }
                    
                }

                Case c1 = args.plateau.rechercheCase(xp, yp);
                Case c2 = args.plateau.rechercheCase(xc, yc);
                Pion p1 = args.plateau.recherchePion(c1);
                verif = args.plateau.deplacer(p1, c2,args.j);

                Case cBG = args.plateau.rechercheCase(yc - 1, xc - 1);
                Case cHG = args.plateau.rechercheCase(yc - 1, xc + 1);
                Case cBD = args.plateau.rechercheCase(yc + 1, xc - 1);
                Case cHD = args.plateau.rechercheCase(yc + 1, xc + 1);
                if ( cHG.Pion == true)
                {
                    Case cHGHG = args.plateau.rechercheCase(yc - 1, xc + 1);
                    if( cHGHG.Pion == false)
                    {
                        faireCoup(sender, args);
                    }
                }
                if ( cBD.Pion == true)
                {
                    Case cBDBD = args.plateau.rechercheCase(yc + 1, xc - 1);
                    if (cBDBD.Pion == false)
                    {
                        faireCoup(sender, args);
                    }
                }
                if( cHD.Pion == true)
                {
                    Case cHDHD = args.plateau.rechercheCase(yc + 1, xc + 1);
                    if (cHDHD.Pion == false)
                    {
                        faireCoup(sender, args);
                    }
                }
                if ( cBG.Pion == true) 
                {
                    Case cBGBG = args.plateau.rechercheCase(yc - 1, xc - 1);
                    if (cBGBG.Pion == false)
                    {
                        faireCoup(sender, args);
                    }
                }

             
                if(verif==false) 
                {
                    Console.WriteLine("Erreur déplacement non valide veuillez recommencer!");
                    verif2 = false;
                    verif3=false;
                    verif4=false;
                    verif5=false;
                }

            }
        
        }

        public void EntrerNoms(object sender, EnterPlayerNameEventArgs args)
        {
            string nom;

            Console.WriteLine("Joueur quel est votre nom ?");
            nom = Console.ReadLine();
            args.joueur.Nom = nom;

            Console.WriteLine("Vous vous appelez donc "+ args.joueur.Nom);


        }

        public void AfficherNomJoueur(object sender, ShowingPlayerNameEventArgs args)
        {
            Console.Write(args.j.Nom);

        }

        public void AfficherGagnant(object sender, ShowingWinnerEventArgs args)
        {
            Console.WriteLine("Bravo "+args.j.Nom + "tu a gagné!!");
        }
    }
}
