/*
    Veidoja: Roberts Onzuls
    Grupa: 110
    Praktiskais darbs: 7
    Izmantotais compiler: www.onlinegdb.com
*/
using System;
using System.Collections.Generic;
using System.Linq;

class program 
{
    static void Main() 
    {
        List<double> izdevumi = new List<double>();
        
        string[,] noliktava = 
        {
            {"", "102", null, "104", ""},
            {"201", "202", "", "204", ""},
            {null, "", "303", null, "305"},
            {"401", "402", "", "404", ""}
        };
        
        bool turpini = true;
        
        do
        {
            Console.Clear();
            Console.WriteLine("Izvēlaties uzdevumu!");
            Console.WriteLine("1. Budžeta analīze");
            Console.WriteLine("2. Preču meklētājs");
            Console.WriteLine("3. Attāluma kalkulators");
            Console.WriteLine("0. Iziet");
            Console.Write("Ievadiet savu izvēli: ");
            int x = Convert.ToInt32(Console.ReadLine());
                
            switch (x)
            {
                case 1: IevadietIzdevumus(izdevumi);
                        break;
                case 2: AtklatPreci(noliktava);
                        break;
                case 3: AprekinatPlaknesAttalumu();
                        break;
                case 0: break;
                default: Console.WriteLine("Nepareizi ievadīta vērtība!");
                         break;
            };
        } while(turpini == true);
            
    }
    static void IevadietIzdevumus(List<double> izdevumi)
    {
        bool turpinat = true;
        
        do
        {
            Console.Clear();
            Console.WriteLine("ievadiet izdevumu!");
            Console.WriteLine("ievadiet 'beigt' lai turpinātu!");
            string izd = Console.ReadLine();
            double izdevums;
            if (Double.TryParse(izd, out izdevums))
            {
                izdevumi.Add(izdevums);
            }
                else
                {   
                    string beigas = izd;
                    if (beigas == "")
                    {
                        turpinat = false;
                    }
                    else if (beigas == "beigt")
                    {
                        turpinat = false;
                    }
                }
        } while (turpinat == true);
        
        Console.Clear();
        foreach (double i in izdevumi)
        {
            Console.WriteLine(i);
        }
        
        Console.WriteLine("Nospiediet taustiņu Enter lai filtrētu izmaksas!");
        while (Console.ReadKey().Key != ConsoleKey.Enter) {}
        FiltretIzdevumus(izdevumi);
    }
    static void FiltretIzdevumus(List<double> izdevumi)
    {
        List<double> FiltretiIzdevumi = izdevumi.Where(x => x > 35.00).ToList();
        Console.Clear();
        foreach (double j in FiltretiIzdevumi)
        {
            Console.WriteLine(j);
        }
        
        Console.WriteLine("Nospiediet taustiņu Enter lai izrēķinātu mainību!");
        while (Console.ReadKey().Key != ConsoleKey.Enter) {}
        AprekinatMainibu(FiltretiIzdevumi);
    }
    static void AprekinatMainibu(List<double> FiltretiIzdevumi)
    {
        double min = FiltretiIzdevumi.Min();
        double max = FiltretiIzdevumi.Max();
        double mainiba = max - min;
        Console.Clear();
        Console.WriteLine($"Izdevumu mainība ir {mainiba}");
        
        Console.WriteLine("Nospiediet taustiņu Enter lai atgrieztos uzdevumu izvēlnē!");
        while (Console.ReadKey().Key != ConsoleKey.Enter) {}
        Main();
    }
    static void AtklatPreci(string[,] noliktava)
    {
        Console.Clear();
        Console.WriteLine("Ievadiet preces kodu!");
        string kods = Console.ReadLine();
        bool atrasts = false;
        int eja = 0, plaukts = 0;

        for (int i = 0; i < noliktava.GetLength(0); i++)
        {
            for (int j = 0; j < noliktava.GetLength(1); j++)
            {
                if (noliktava[i, j] == kods)
                {
                    eja = i; plaukts = j;
                    atrasts = true;
                    break;
                }
            }
            if (atrasts) break;
        }

        if (atrasts) 
        {
            Console.WriteLine($"Prece ir {eja + 1}. ejas {plaukts + 1}. plauktā.");
        }
        else
        {
            Console.WriteLine("Prece nav atrasta");
        }
        
        Console.WriteLine("Nospiediet taustiņu Enter lai izrēķinātu tukšos plauktus!");
        while (Console.ReadKey().Key != ConsoleKey.Enter) {}
        AprekinatNeaizpilditas(noliktava);
    }
    static void AprekinatNeaizpilditas(string[,] noliktava)
    {
        int tuksie = 0;
        foreach(var f in noliktava)
        if (string.IsNullOrEmpty(f)) tuksie++;
        Console.Clear();
        Console.WriteLine($"Noliktavā ir {tuksie} tukši plaukti.");
        Console.WriteLine("Nospiediet taustiņu Enter lai atgrieztos uzdevumu izvēlnē!");
        while (Console.ReadKey().Key != ConsoleKey.Enter) {}
        Main();
    }
    static void AprekinatPlaknesAttalumu()
    {
        Console.Clear();
        Console.Write("Ievadiet pirmā punkta koordinātas (atdalīti ar atstarpi): ");
        string[] p1 = Console.ReadLine().Split(' ');
    
        double x1 = Convert.ToDouble(p1[0]);
        double y1 = Convert.ToDouble(p1[1]);
    
        Console.Write("Ievadi otrā punkta koordinātas (atdalīti ar atstarpi): ");
        string[] p2 = Console.ReadLine().Split(' ');
    
        double x2 = Convert.ToDouble(p2[0]);
        double y2 = Convert.ToDouble(p2[1]);
        
        double deltaX = Math.Pow(x2 - x1, 2);
        double deltaY = Math.Pow(y2 - y1, 2);
    
        double distance = Math.Round(Math.Sqrt(deltaX + deltaY), 2);
        Console.Clear();
        Console.WriteLine($"Attālums starp punktiem ir {distance}");
        Console.WriteLine("Nospiediet taustiņu Enter lai pārvērstu leņķi!");
        while (Console.ReadKey().Key != ConsoleKey.Enter) {}
        KonvertetRadianos();
    }
    static void KonvertetRadianos()
    {
        Console.Clear();
        Console.Write("Ievadiet leņķi: ");
        double gradi = Convert.ToDouble(Console.ReadLine());
        double radiani = Math.Round(gradi * (Math.PI/180), 2);
        Console.Write($"{gradi} grādus liels leņķis ir {radiani} radiāni!");
        Console.WriteLine("Nospiediet taustiņu Enter lai atgrieztos uzdevumu izvēlnē!");
        while (Console.ReadKey().Key != ConsoleKey.Enter) {}
        Main();
    }
}