/*
Veidoja: Roberts Onzuls, Edgars Katajevs
Grupa: 110
Praktiskais darbs: C# RPG spēle
Izmantotais compiler: www.onlinegdb.com (C# .NET)
*/

using System;

namespace RPGSpele
{
    //Maģiju klase
    class Magic
    {
        private string _magicName;
        private int _cooldown;
        private int _mpc; //magic point cost
        private int _radius;
        private double _dmg;

        public Magic(string name, int cd, int mpc, int radius, double dmg)
        {
            _magicName = name;
            _cooldown = cd;
            _mpc = mpc;
            _radius = radius;
            _dmg = dmg;
        }

        public string GetName() { return _magicName; }
        public int GetMPC() { return _mpc; }
        public double GetDMG() { return _dmg; }
    }

    //Spēlētāju klase
    class Wizard
    {
        private string _name;
        private double _hp;
        private int _mp;
        private double _defence;
        private int _level;

        public Wizard(string name, double hp, int mp, double def, int lvl)
        {
            _name = name;
            _hp = hp;
            _mp = mp;
            _defence = def;
            _level = lvl;
        }

        //Maģiju lietošanas loģika
        public void CastMagic(Wizard target, Magic spell)
        {
            Console.WriteLine(this._name + " izmanto " + spell.GetName() + " uz " + target._name);

            //MP pret MPC pārbaude lai var izmantot maģiju
            if (this._mp >= spell.GetMPC())
            {
                // Formula: Dzīvība - (Maģijas DMG * Spēletāja Defence / 100)
                double damageDealt = spell.GetDMG() * (target._defence / 100.0);
                
                this._mp -= spell.GetMPC();
                target._hp -= damageDealt;

                //Rezultātu izvade
                Console.WriteLine("Rezultats: " + damageDealt.ToString("F2") + " bojājumi nodarīti.");
                Console.WriteLine(target._name + " HP tagad: " + target._hp.ToString("F2"));
                
                SpecialEffect(this, target, spell);
            }
            else
            {
                //Ja MP nepietik lai segtu MPC
                Console.WriteLine("Kļūda: " + this._name + "Nepietiek MP!");
            }
            Console.WriteLine("--------------------------------------");
        }

        public void SpecialEffect(Wizard caster, Wizard enemy, Magic spell)
        {
            // Metode kkādiem efektiem, piem. degšana, salšana utt.
        }

        //Vizuāli parāda HP un MP vērtības
        public void Dati()
        {
            Console.WriteLine("Tēls: " + _name + " | HP: " + _hp + " | MP: " + _mp);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            //Izveido objektus klasēm
            Wizard w1 = new Wizard("Wizard", 190.0, 100, 69.0, 1);
            Wizard w2 = new Wizard("Electro Wizard", 150.0, 80, 67.0, 1);

            Magic m1 = new Magic("Fireball", 10, 20, 4, 22.0);
            Magic m2 = new Magic("Lightning", 12, 24, 1, 45.0);

            Console.WriteLine("=== RPG SIMULACIJA ===");
            w1.Dati();
            w2.Dati();
            Console.WriteLine("--------------------------------------");
            
            Console.WriteLine("Nospiediet Enter lai uzsāktu simulaciju");
            Console.ReadKey();
            
                // Simulācija: katrs izmanto spējas vienreiz
                w1.CastMagic(w2, m1);
                w2.CastMagic(w1, m2);
            

            Console.WriteLine("Simulācija pabeigta. Nospiediet Enter...");
            Console.ReadKey();
        }
    }
}
