using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace ConsoleApp1
{
    public class Kepviselo
    {
        public int valasztokerulet, szavazatok;
        public string nev, part;
        public Kepviselo(int szam1, int szam2, string nev, string part)
        {
            this.valasztokerulet = szam1;
            this.szavazatok = szam2;
            this.nev = nev;
            this.part = part;
        }
    }
    public static class Data
    {
        public static List<Kepviselo> kepviselok = new List<Kepviselo>();
    }
    class Program
    {
        public static void ReadData()
        {
            FileStream fileStream = new FileStream("..\\szavazatok.txt", FileMode.Open, FileAccess.Read);
            StreamReader streamReader = new StreamReader(fileStream);

            string line = streamReader.ReadLine();
            while (line != null)
            {
                string[] splitted = line.Split(' ');
                string nev = $"{splitted[2]} {splitted[3]}";
                Kepviselo kepviselo = new Kepviselo(Convert.ToInt32(splitted[0]), Convert.ToInt32(splitted[1]), nev, splitted[4]);
                Data.kepviselok.Add(kepviselo);
                line = streamReader.ReadLine();
            }

            streamReader.Close();
            fileStream.Close();
        }

        public static int KepviseloNum()
        {
            return Data.kepviselok.Count;
        }
        public static void Feladat2()
        {
            Console.WriteLine($"A helyhatósági választáson {KepviseloNum()} képviselőjelölt indult.");
        }

        public static int SzavazatNum(string kepviselo)
        {
            foreach (var item in Data.kepviselok)
            {
                if (item.nev.ToLower() == kepviselo.ToLower())
                {
                    return item.szavazatok;
                }
            }

            return -1;
        }
        public static void Feladat3()
        {
            Console.WriteLine("Add meg egy képviselő nevét!");
            string name = Console.ReadLine();
            int num = SzavazatNum(name);
            if (num >= 0)
            {
                Console.WriteLine($"{name} nevű képviselőre {num}db szavazatot adtak le.");
            }
            else
            {
                Console.WriteLine("Ilyen nevű képviselőjelölt nem szerepel a nyilvántartásban!");                
            }

        }

        public static int SzavazokNum()
        {
            int num = 0;
            foreach (var item in Data.kepviselok)
            {
                num += item.szavazatok;
            }
            return num;
        }
        public static void Feladat4()
        {
            const int jogosultak = 12345;
            int num = SzavazokNum();
            double percentage = RoundedPercentage(num, jogosultak);
            Console.WriteLine($"A választáson {num} állampolgár, a jogosultak {percentage}%-a vett részt.");
        }   

        public static double RoundedPercentage(int num, int all)
        {
            double sol = Convert.ToDouble(num) / Convert.ToDouble(all) * 100;
            return Math.Round(sol, 2);
        }

        public static void Feladat5()
        {
            int jogosultak = SzavazokNum();
            int GYEP = 0;
            int HEP = 0;
            int TISZ = 0;
            int ZEP = 0;
            int FUG = 0;
            foreach (var item in Data.kepviselok)
            {
                switch (item.part)
                {
                    case "GYEP":
                        GYEP += item.szavazatok;
                        break;
                    case "HEP":
                        HEP += item.szavazatok;
                        break;
                    case "TISZ":
                        TISZ += item.szavazatok;
                        break;
                    case "ZEP":
                        ZEP += item.szavazatok;
                        break;
                    default:
                        FUG += item.szavazatok;
                        break;
                }
            }

            Console.WriteLine($"Gyermek evők pártja: {RoundedPercentage(GYEP, jogosultak)}%");
            Console.WriteLine($"Herpeszesek pártja: {RoundedPercentage(HEP, jogosultak)}%");
            Console.WriteLine($"Tisztáltalanok pártja: {RoundedPercentage(TISZ, jogosultak)}%");
            Console.WriteLine($"Zöldségevők pártja: {RoundedPercentage(ZEP, jogosultak)}%");
            Console.WriteLine($"Független jelöltek: {RoundedPercentage(FUG, jogosultak)}%");

        }

        public static void Feladat6()
        {
            List<Kepviselo> legjobbak = new List<Kepviselo>();
            int szavazatmax = Data.kepviselok[0].szavazatok;
            foreach (var item in Data.kepviselok)
            {
                if (item.szavazatok > szavazatmax)
                {
                    szavazatmax = item.szavazatok;
                }
            }

            foreach (var item in Data.kepviselok)
            {
                if (item.szavazatok == szavazatmax)
                {
                    legjobbak.Add(item);
                }
            }

            Console.WriteLine($"A legtöbb szavazat: {szavazatmax}db");
            foreach (var item in legjobbak)
            {
                Console.WriteLine($"{item.nev}, {item.part}");
            }
        }
        static void Main(string[] args)
        {
            ReadData();
            Feladat2();
            Feladat3();
            Feladat4();
            Feladat5();
            Feladat6();
        }
    }
}