// PRIVATE METHODS

        private static double FightViewers(FightOutcome fo)
        {
            double viewers;


            Fighter f1 = fo.Fighter1();
            Fighter f2 = fo.Fighter2();


            //Country country = f1.Nationality;
            //Console.WriteLine(f1.Nationality + "'s buff is " + country.PopularityBuff);

            WeightClass w1 = (WeightClass)f1.Weight;

            //WeightCoefficient[w1.Weight]



            fo.Interested = MathUtils.Gauss(((f1.Performance["Elo"] + f2.Performance["Elo"]) / 2), 100) *
                            (f1.Nationality.PopularityBuff * f2.Nationality.PopularityBuff * w1.Popularity + f1.Belts + f2.Belts);



            //viewers = f1.Performance["Fans"] + f1.Performance["Followers"] + f1.Performance["Casuals"];
            //viewers += (f1.Performance["Fans"] + f2.Performance["Followers"] + f2.Performance["Casuals"]);


            viewers = fo.Interested + (PWin(fo)) * f1.Performance["Followers"] + (1 - PWin(fo) * f2.Performance["Followers"]) + (PWin(fo)) * f1.Performance["Fans"] + (1 - PWin(fo) * f2.Performance["Fans"]);


            return(viewers);
        }
        /// <summary>
        //  The method update fighter popularity of both fighters as a result
        //  of FightOutcome object
        //
        //  at the end of the method, FighterOutcome viewership is set by the
        //  result of a private FightViewers(FighterOutcome) method. No need to
        //  to call FightViewers outside of this class.
        /// </summary>
        public static void UpdatePopularity(FightOutcome fo)
        {
            double fans1 = fo.Fighter1().Performance["Fans"];
            double fans2 = fo.Fighter2().Performance["Fans"];

            double casuals1 = fo.Fighter1().Performance["Casuals"];
            double casuals2 = fo.Fighter2().Performance["Casuals"];

            double followers1 = fo.Fighter1().Performance["Followers"];
            double followers2 = fo.Fighter2().Performance["Followers"];


            Console.WriteLine("Fighter1: " + ToString(fo.Fighter1()));
            Console.WriteLine("Fighter2: " + ToString(fo.Fighter2()));

            double CountryCoeff1 = fo.Fighter1().Nationality.PopularityBuff;
            double CountryCoeff2 = fo.Fighter2().Nationality.PopularityBuff;
            double WeightCoeff   = ((WeightClass)fo.Fighter1().Weight).Popularity;


            // do the calculation

            if (fo.Fighter1() == fo.Winner)
            {
                //winner


                double delta = 0.09 * casuals1 * (1 - PWin(fo)) * WeightCoeff * CountryCoeff1;
                delta     = MathUtils.Gauss(delta, 0.5);
                fans1    += delta;
                casuals1 -= delta;

                delta     = 0.4 * fo.Interested * (1 - PWin(fo)) * WeightCoeff * CountryCoeff1;
                delta     = MathUtils.Gauss(delta, 0.5);
                casuals1 += delta;
                //fo.Interested =- delta;

                delta       = 0.09 * casuals1 * (1 - PWin(fo)) * WeightCoeff * CountryCoeff1;
                delta       = MathUtils.Gauss(delta, 0.5);
                followers1 += delta;
                casuals1   -= 0.18 * casuals1;

                //loser

                delta     = 0.1 * fans2 * (1 - PWin(fo));
                delta     = MathUtils.Gauss(delta, 0.5);
                fans2    -= delta;
                casuals2 += delta;

                delta     = 0.1 * casuals2 * (1 - PWin(fo));
                delta     = MathUtils.Gauss(delta, 0.5);
                casuals2 -= delta;
                //fo.Interested = +delta;

                delta       = 0.1 * followers2 * (1 - PWin(fo));
                delta       = MathUtils.Gauss(delta, 0.5);
                followers2 -= delta;
                casuals2   += delta;
            }
            else if (fo.Fighter2() == fo.Winner)
            {
                //loser

                double delta = 0.09 * casuals1 * (PWin(fo));
                delta     = MathUtils.Gauss(delta, 0.5);
                fans1    -= delta;
                casuals1 += delta;

                delta     = 0.4 * fo.Interested * (PWin(fo));
                delta     = MathUtils.Gauss(delta, 0.5);
                casuals1 -= delta;
                //fo.Interested =+ delta;

                delta       = 0.09 * casuals1 * (PWin(fo));
                delta       = MathUtils.Gauss(delta, 0.5);
                followers1 -= delta;
                casuals1   += 0.18 * casuals1;

                //winner

                delta     = 0.1 * fans2 * (PWin(fo)) * WeightCoeff * CountryCoeff2;
                delta     = MathUtils.Gauss(delta, 0.5);
                fans2    += delta;
                casuals2 -= -delta;

                delta     = 0.1 * casuals2 * (PWin(fo)) * WeightCoeff * CountryCoeff2;
                delta     = MathUtils.Gauss(delta, 0.5);
                casuals2 += delta;
                //fo.Interested =- delta;

                delta       = 0.1 * followers2 * (PWin(fo)) * WeightCoeff * CountryCoeff2;
                delta       = MathUtils.Gauss(delta, 0.5);
                followers2 += delta;
                casuals2   -= delta;
            }


            // end of calculation

            fo.Fighter1().Performance["Fans"]      = fans1;
            fo.Fighter2().Performance["Fans"]      = fans2;
            fo.Fighter1().Performance["Casuals"]   = casuals1;
            fo.Fighter2().Performance["Casuals"]   = casuals2;
            fo.Fighter1().Performance["Followers"] = followers1;
            fo.Fighter2().Performance["Followers"] = followers2;

            fo.Viewership = FightViewers(fo);

            Console.WriteLine(ToString(fo));
            Console.WriteLine("Fighter1: " + ToString(fo.Fighter1()));
            Console.WriteLine("Fighter2: " + ToString(fo.Fighter2()) + "\n");
        }
 internal static double PWin(FightOutcome fo)
 {
     return(1 / (1 + Math.Pow(10, (fo.Fighter2().Performance["Elo"] - fo.Fighter1().Performance["Elo"]) / 400)));
 }