using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Runtime.InteropServices;
namespace ConsoleApp1
{
    public class Jatekos
    {
        public string nev;
        public string kategoria;
        public string egyesulet;
        public int[] pontok = { };
        public int osszpont;

        public Jatekos(string Nev, string Kategoria, string Egyesulet, int[] Pontok)
        {
            nev = Nev;
            kategoria = Kategoria;
            egyesulet = Egyesulet;
            pontok = Pontok;
            osszpont = Osszpontszam(Pontok);
        }

        public static int Osszpontszam(int[] p)
        {

            int nulldb = 0;
            foreach (var item in p)
            {
                if (item == 0)
                {
                    nulldb++;
                }
            }
            Array.Sort(p);

            int x = p.Sum();
            int legkisebb = p.Min();
            int legkisebb2 = p[1];

            if (nulldb == 0)
            {
                x -= legkisebb;
                x -= legkisebb2;
                x += 20;
                return x;
            }
            else if (nulldb == 1)
            {
                x -= legkisebb2;
                x += 10;
                return x;
            }
            else
            {
                return x;
            }
        }
    }
    internal class Program
    {
        static void Main(string[] args)
        {
            FileStream fs = new FileStream("fob2016.txt", FileMode.Open, FileAccess.Read);
            StreamReader sr = new StreamReader(fs);

            List<Jatekos> adatok = new List<Jatekos>();

            string sor = sr.ReadLine();


            while (sor != null)
            {
                string[] soradat = sor.Split(';');
                int[] temppont = { };
                for (int i = 3; i < soradat.Length; i++)
                {
                    int pont = int.Parse(soradat[i]);
                    temppont = temppont.Append(pont).ToArray();
                }
                Jatekos jatekos = new Jatekos(soradat[0], soradat[1], soradat[2], temppont);
                adatok.Add(jatekos);
                sor = sr.ReadLine();
            }

            double db = 0;
            double ndb = 0;

            foreach (var item in adatok)
            {
                db++;
                if (item.kategoria == "Noi")
                {
                    ndb++;
                }
            }

            Console.WriteLine($"3. feladat: Versenyzők száma: {db}");
            Console.WriteLine($"4. feladat: A női versenyzők aránya: {Math.Round((ndb / db) * 100, 2)}%");
            
            int bajnok = 0;
            for (int i = 0; i < adatok.Count; i++)
            {
                if (adatok[i].osszpont > adatok[bajnok].osszpont)
                {
                    bajnok = i;
                }
            }

            Console.WriteLine($"6. feladat: A bajnok női versenyző");
            Console.WriteLine($"\tNév: {adatok[bajnok].nev}");
            Console.WriteLine($"\tEgyesület: {adatok[bajnok].egyesulet}");
            Console.WriteLine($"\tÖsszpont: {adatok[bajnok].osszpont}");
            FileStream fileStream = new FileStream("osszpontFF.txt", FileMode.Create, FileAccess.Write); ;
            StreamWriter streamWriter = new StreamWriter(fileStream);

            foreach (var jatekos in adatok)
            {
                if (jatekos.kategoria == "Felnott ferfi")
                {
                    streamWriter.WriteLine($"{jatekos.nev};{jatekos.osszpont}");
                }
            }
            streamWriter.Close();
            fileStream.Close();

            List<string> egy = new List<string>();
            List<int> jatekosok = new List<int>();
  
            foreach (var item in adatok)
            {
                if (egy.Contains(item.egyesulet))
                {
                    continue;
                }
                else if (item.egyesulet != "n.a.")
                {
                    egy.Add(item.egyesulet);
                }
            }

            foreach (var egyesulet in egy)
            {
                int cntr = 0;
                foreach (var item in adatok)
                {
                    if (egyesulet == item.egyesulet)
                    {
                        cntr++;
                    }
                }
                jatekosok.Add(cntr);
            }

            List<int> removeindex = new List<int>();
            for (int i = 0; i < egy.Count; i++)
            {
                if (jatekosok[i] <= 2)
                {
                    removeindex.Add(i);
                }
            }
            Console.WriteLine($"8. feladat: Egyesület statisztika");
            
            removeindex.Reverse();
            for (int i = 0; i < removeindex.Count; i++)
            {
                egy.RemoveAt(removeindex[i]);
                jatekosok.RemoveAt(removeindex[i]);
            }


            for (int i = 0; i < egy.Count; i++)
            {
                Console.WriteLine($"\t{egy[i]} - {jatekosok[i]} fő");
            }

            
            sr.Close();
            fs.Close();
        }
    }
}