using System;

namespace OrderStacks.model
{
    public class Fraction
    {
        public int Numerateur;
        public int Denominateur;
        public int SizeMax;

        public Fraction(int numerateur, int denominateur, int sizeMax)
        {
            Numerateur = numerateur;
            Denominateur = denominateur;
            SizeMax = sizeMax;
        }

        public bool isMultiple(Fraction fraction)
        {
            bool numIsZero = false;
            bool denIsZero = false;
            if (fraction.Numerateur == 0)
            {
                numIsZero = true;
            }
            if (fraction.Denominateur == 0)
            {
                denIsZero = true;
            }
            if (fraction.Numerateur == 1 && denIsZero)
            {
                if (fraction.Denominateur != 1
                    && fraction.Denominateur != Denominateur
                    && Denominateur % fraction.Denominateur == 0)
                {
                    return true;
                }
            }
            else if (fraction.Denominateur == 1 && !numIsZero)
            {
                if (fraction.Numerateur != 1
                    && fraction.Numerateur != Numerateur
                    && Numerateur % fraction.Numerateur == 0)
                {
                    return true;
                }
            }
            else if (fraction.Numerateur == Numerateur && !denIsZero)
            {
                if (fraction.Denominateur != Denominateur
                    && Denominateur % fraction.Denominateur == 0)
                {
                    return true;
                }
            }
            else if (fraction.Denominateur == Denominateur && !numIsZero)
            {
                if (fraction.Numerateur != Numerateur
                    && Numerateur % fraction.Numerateur == 0)
                {
                    return true;
                }
            }
            else
            {
                if (!numIsZero)
                {
                    if (Numerateur % fraction.Numerateur == 0)
                    {
                        return true;
                    }
                }
                if (denIsZero)
                {
                    if (Denominateur % fraction.Denominateur == 0)
                    {
                        return true;
                    }
                }
            }
            return false;
        }

        public bool testDiviseurCommun(Fraction fraction)
        {
            if (PGCD(Numerateur, fraction.Numerateur) == Numerateur || PGCD(Denominateur, fraction.Denominateur) == Denominateur)
            {
                return true;
            }
            return false;
        }

        private int PGCD(int a, int b)
        {
            int temp = a % b;
            if (temp == 0)
                return b;
            return PGCD(b, temp);
        }

        public decimal Result()
        {
            decimal result = (decimal)Numerateur / (decimal)Denominateur;
            return result;
        }

        override public string ToString()
        {
            return Numerateur.ToString() + "/" + Denominateur.ToString();
        }
    }
}
