/*
    Veidoja: Emīlija Anna Bukus
    Grupa: 110
    Prakiskais darbs 7
    Izmantotais Compiler: Visual Studio
    C# izmantotā versija - Console Apps (.NET) / Console Apps
*/


// Es pirmo reizi izmantoju Visual Studio, neesmu pieradusi, un viņš visādas problēmas meta ārā


using System;
using System.Collections.Generic;

class HelloWorld
{
    private const string PreceNavAtrasta = "Prece nav atrasta!";

    static void Main(string[] args)
    {
// 1. uzd main
        Console.WriteLine("Budžeta analīze");

        List<double> izdevumi = IevadietIzdevumus();

        Console.Write("Ievadiet minimālo slieksni filtrēšanai: ");
        if (!double.TryParse(Console.ReadLine(), out double slieksnis))
        {
            Console.WriteLine("Nederīga ievade!");
            return;
        }

        List<double> filtrs = FiltretIzdevumus(izdevumi, slieksnis);
        Console.WriteLine("Diapazons: " + AprekinatMainibu(filtrs));

// 2. uzd main
        string[,] noliktava =
        {
            { "", "A1", "A2", "A3", "A4" },
            { "B1", "", "B3", "B4", "B5" },
            { "C1", "C2", "", "C4", "C5" },
            { "D1", "D2", "D3", "", "D5" }
        };

        Console.Write("Ievadiet meklējamo preces kodu: ");
        string kods = Console.ReadLine();
        Console.WriteLine(AtklatPreci(noliktava, kods));
        Console.WriteLine("Tukšo plauktu skaits: " + AprekinatNeaizpilditas(noliktava));

// 3. uzd main
        Console.WriteLine("\nAttāluma kalkulators");

        double x1 = IevadeKoordinatai("x1");
        double y1 = IevadeKoordinatai("y1");
        double x2 = IevadeKoordinatai("x2");
        double y2 = IevadeKoordinatai("y2");

        Console.WriteLine("Attālums: " + AprekinatPlaknesAttalumu(x1, y1, x2, y2));

        Console.Write("Ievadiet grādus pārvēršanai radiānos: ");
        if (double.TryParse(Console.ReadLine(), out double gradi))
            Console.WriteLine("Radiānos: " + KonvertetRadianos(gradi));
        else
            Console.WriteLine("Nederīga ievade!");
    }

// 1.uzd

    static List<double> IevadietIzdevumus()
    {
        List<double> izdevumi = new List<double>();

        while (true)
        {
            Console.Write("Ievadiet izdevumu summu (vai 'gals' lai beigtu): ");
            string ievade = Console.ReadLine();
            if (string.IsNullOrWhiteSpace(ievade) || ievade.ToLower() == "gals")
                break;

            if (double.TryParse(ievade, out double summa))
                izdevumi.Add(summa);
            else
                Console.WriteLine("Nederīga ievade!");
        }

        return izdevumi;
    }

    static List<double> FiltretIzdevumus(List<double> izejasDati, double slieksnis)
    {
        List<double> filtrs = new List<double>();

        foreach (double izdevums in izejasDati)
        {
            if (izdevums >= slieksnis)
                filtrs.Add(izdevums);
        }

        return filtrs;
    }

    static double AprekinatMainibu(List<double> dati)
    {
        if (dati.Count == 0) return 0;

        double max = double.MinValue;
        double min = double.MaxValue;

        foreach (double x in dati)
        {
            if (x > max) max = x;
            if (x < min) min = x;
        }

        return Math.Abs(max - min);
    }

// 2.uzd
    static string AtklatPreci(string[,] masivs, string kods)
    {
        for (int eja = 0; eja < masivs.GetLength(0); eja++)
        {
            for (int plaukts = 0; plaukts < masivs.GetLength(1); plaukts++)
            {
                if (masivs[eja, plaukts] == kods)
                {
                    return $"Prece atrasta Eja {eja + 1}, Plaukts {plaukts + 1}";
                }
            }
        }

        return PreceNavAtrasta;
    }

    static int AprekinatNeaizpilditas(string[,] masivs)
    {
        int skaits = 0;
        for (int eja = 0; eja < masivs.GetLength(0); eja++)
        {
            for (int plaukts = 0; plaukts < masivs.GetLength(1); plaukts++)
            {
                if (string.IsNullOrEmpty(masivs[eja, plaukts]))
                    skaits++;
            }
        }

        return skaits;
    }


// 3.uzd
    static double AprekinatPlaknesAttalumu(double x1, double y1, double x2, double y2)
    {
        double dx = x2 - x1;
        double dy = y2 - y1;

        return Math.Sqrt(Math.Pow(dx, 2) + Math.Pow(dy, 2));
    }

    static double KonvertetRadianos(double gradi)
    {
        return gradi * (Math.PI / 180);
    }
    static double IevadeKoordinatai(string nosaukums)
    {
        Console.Write($"Ievadiet {nosaukums}: ");
        if (double.TryParse(Console.ReadLine(), out double rezultats))
            return rezultats;

        Console.WriteLine("Nederīga ievade! Tiek izmantota 0.");
        return 0;
    }
}