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

namespace TestUnit
{
    public class PlateauTest
    {
        [Fact]
        public void TestConstructorValid()
        {
            Plateau plateau = new Plateau();

            Assert.NotNull(plateau);
            Assert.NotNull(plateau.ListePions);
            Assert.NotNull(plateau.ListeCases);
            Assert.Equal(40, plateau.ListePions.Count);
            Assert.Equal(100, plateau.ListeCases.Count);
        }
        [Fact]
        public void TestSetListeCases() 
        {
            Plateau plateau = new Plateau();

            Case c = new Case(Couleur.BLANC, 0, 3);
            plateau.ListeCases.Add(c);
            Assert.Equal(101, plateau.ListeCases.Count);
        }
        [Fact]
        public void TestSetListePions()
        {
            Plateau plateau = new Plateau();

            Case c = new Case(Couleur.BLANC, 0, 3);
            plateau.ListePions.Add(new Pion(Couleur.BLANC, c));
            Assert.Equal(41, plateau.ListePions.Count);
        }
        [Fact]
        public void TestDeplacerPionIsValid1()
        {
            Plateau plateau = new Plateau();

            Case c = new Case(Couleur.NOIR, 3, 0);
            Case c1 = new Case(Couleur.NOIR, 4, 1);
            Pion p = new Pion(Couleur.NOIR, c);
            Joueur j = new Joueur("toto", Couleur.NOIR);
            
            Assert.True(plateau.deplacer(p,c1,j));
           
        }

        [Fact]
        public void TestDeplacerPionIsValid2()
        {
            Plateau plateau = new Plateau();

            Case c = plateau.rechercheCase(3,0);
            Case c1 = plateau.rechercheCase(4, 1);
            Case c2 = plateau.rechercheCase(5, 2);
            Case c3 = plateau.rechercheCase(6, 1);
            Pion p = plateau.recherchePion(c);
            Pion p1 = plateau.recherchePion(c3);
            Joueur j = new Joueur("toto", Couleur.NOIR);
            Joueur j2 = new Joueur("toto", Couleur.BLANC);

            
            plateau.deplacer(p1,c2,j2);
            plateau.deplacer(p, c1, j);
            Assert.True(plateau.deplacer(p1,c,j2));
        }
        [Fact]
        public void TestDeplacerPionIsValid3()
        {
            Plateau plateau = new Plateau();

            Case c = plateau.rechercheCase(3, 0);
            Case c1 = plateau.rechercheCase(4, 1);
            Case c2 = plateau.rechercheCase(5, 2);
            Case c3 = plateau.rechercheCase(6, 1);
            Case c4 = plateau.rechercheCase(5, 0);
            Pion p = plateau.recherchePion(c);
            Pion p1 = plateau.recherchePion(c3);
            Joueur j = new Joueur("toto", Couleur.NOIR);
            Joueur j2 = new Joueur("toto", Couleur.BLANC);


            plateau.deplacer(p, c1, j);
            plateau.deplacer(p1, c4, j2);
            plateau.deplacer(p, c2, j);
            plateau.deplacer(p1, c1, j2);

            Assert.True(plateau.deplacer(p, c, j));
        }
        [Fact]
        public void TestDeplacerPionIsNotValid1()
        {
            Plateau plateau = new Plateau();

            Case c = new Case(Couleur.NOIR, 0, 3);
            Pion p = new Pion(Couleur.NOIR, c);
            Joueur j = new Joueur("toto", Couleur.NOIR);

            
            Assert.False(plateau.deplacer(p, c, j));


        }
        [Fact]
        public void TestDeplacerPionIsNotValid2()
        {
            Plateau plateau = new Plateau();

            Case c = new Case(Couleur.NOIR, 0, 3);
            Case c1 = new Case(Couleur.NOIR, 1, 4);
            Pion p = new Pion(Couleur.NOIR, c);
            Joueur j = new Joueur("toto", Couleur.BLANC);


            Assert.False(plateau.deplacer(p, c1, j));


        }
        [Fact]
        public void TestDeplacerPionIsNotValid3()
        {
            Plateau plateau = new Plateau();

            Case c = new Case(Couleur.NOIR, 3, 0);
            Case c1 = new Case(Couleur.NOIR, 5, 2);
            Pion p = new Pion(Couleur.NOIR, c);
            Joueur j = new Joueur("toto", Couleur.NOIR);


            Assert.False(plateau.deplacer(p, c1, j));


        }
        [Fact]
        public void TestDeplacerPionIsNotValid4()
        {
            Plateau plateau = new Plateau();

            Case c = new Case(Couleur.NOIR, 3, 0);
            Case c1 = new Case(Couleur.NOIR, 4, 1);
            Pion p = new Pion(Couleur.NOIR, c1);
            Joueur j = new Joueur("toto", Couleur.NOIR);


            Assert.False(plateau.deplacer(p, c, j));


        }
        [Fact]
        public void TestDeplacerPionIsNotValid5()
        {
            Plateau plateau = new Plateau();

            Case c = plateau.rechercheCase(3, 0);
            Case c1 = plateau.rechercheCase(4, 1);
            Case c2 = plateau.rechercheCase(5, 2);
            Case c3 = plateau.rechercheCase(3, 2);
            Pion p = plateau.recherchePion(c);
            Pion p1 = plateau.recherchePion(c3);
            Joueur j = new Joueur("toto", Couleur.NOIR);


            plateau.deplacer(p, c1, j);
            Assert.False(plateau.deplacer(p1, c2, j));
        }
        [Fact]
        public void TestDeplacerDameIsValid1()
        {
            Plateau plateau = new Plateau();

            Case c = new Case(Couleur.NOIR, 3, 0);
            Case c1 = new Case(Couleur.NOIR, 4, 1);
            Dame d = new Dame(Couleur.NOIR, c);
            Joueur j = new Joueur("toto", Couleur.NOIR);

            Assert.True(plateau.deplacer(d, c1, j));

        }

        [Fact]
        public void TestDeplacerDameIsValid2()
        {
            Plateau plateau = new Plateau();

            Case c = plateau.rechercheCase(3, 0);
            Case c1 = plateau.rechercheCase(4, 1);
            Case c2 = plateau.rechercheCase(5, 2);
            Case c3 = plateau.rechercheCase(6, 1);
            Pion p = plateau.recherchePion(c);
            Dame d = new Dame(Couleur.BLANC, c3);
            plateau.ListePions.Add(d);
            Joueur j = new Joueur("toto", Couleur.NOIR);
            Joueur j2 = new Joueur("toto", Couleur.BLANC);


            plateau.deplacer(d, c2, j2);
            plateau.deplacer(p, c1, j);
            Assert.True(plateau.deplacer(d, c, j2));
        }
        [Fact]
        public void TestDeplacerDameIsValid3()
        {
            Plateau plateau = new Plateau();

            Case c = plateau.rechercheCase(3, 0);
            Case c1 = plateau.rechercheCase(4, 1);
            Case c2 = plateau.rechercheCase(5, 2);
            Case c3 = plateau.rechercheCase(6, 1);
            Case c4 = plateau.rechercheCase(5, 0);
            Dame d = new Dame(Couleur.NOIR,c);
            plateau.ListePions.Add(d);
            Pion p1 = plateau.recherchePion(c3);
            Joueur j = new Joueur("toto", Couleur.NOIR);
            Joueur j2 = new Joueur("toto", Couleur.BLANC);


            plateau.deplacer(d, c1, j);
            plateau.deplacer(p1, c4, j2);
            plateau.deplacer(d, c2, j);
            plateau.deplacer(p1, c1, j2);

            Assert.True(plateau.deplacer(d, c, j));
        }
        [Fact]
        public void TestDeplacerDameIsValid4()
        {
            Plateau plateau = new Plateau();

            Case c = new Case(Couleur.NOIR, 3, 0);
            Case c1 = new Case(Couleur.NOIR, 5, 2);
            Dame d = new Dame(Couleur.NOIR, c);
            Joueur j = new Joueur("toto", Couleur.NOIR);

            Assert.True(plateau.deplacer(d, c1, j));

        }
       /* [Fact]
        public void TestDeplacerDameIsNotValid()
        {
            Plateau plateau = new Plateau();

            Case c = new Case(Couleur.NOIR, 0, 3);
            Dame d = new Dame(Couleur.NOIR, c);
            Joueur j = new Joueur("toto", Couleur.NOIR);


            Assert.False(plateau.deplacer(d, c, j));


        }*/
        [Fact]
        public void TestDeplacerDameIsNotValid2()
        {
            Plateau plateau = new Plateau();

            Case c = new Case(Couleur.NOIR, 0, 3);
            Case c1 = new Case(Couleur.NOIR, 1, 4);
            Dame d = new Dame(Couleur.NOIR, c);
            Joueur j = new Joueur("toto", Couleur.BLANC);


            Assert.False(plateau.deplacer(d, c1, j));


        }
        [Fact]
        public void TestDeplacerDameIsNotValid3()
        {
            Plateau plateau = new Plateau();

            Case c = new Case(Couleur.NOIR, 3, 0);
            Case c1 = new Case(Couleur.NOIR, 4, 1);
            Dame d = new Dame(Couleur.NOIR, c1);
            Joueur j = new Joueur("toto", Couleur.NOIR);


            Assert.False(plateau.deplacer(d, c, j));


        }
        [Fact]
        public void TestDeplacerDameIsNotValid4()
        {
            Plateau plateau = new Plateau();

            Case c = plateau.rechercheCase(3, 0);
            Case c1 = plateau.rechercheCase(4, 1);
            Case c2 = plateau.rechercheCase(5, 2);
            Case c3 = plateau.rechercheCase(3, 2);
            Pion p = plateau.recherchePion(c);
            Dame d = new Dame(Couleur.NOIR, c3);
            plateau.ListePions.Add(d);
            Joueur j = new Joueur("toto", Couleur.NOIR);


            plateau.deplacer(p, c1, j);
            Assert.False(plateau.deplacer(d, c2, j));
        }

    }
 
}
