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

namespace Shlukova_Analyza_BP
{
    class ZpracovaniTxt
    {
        private List<Scenar> seznamScenaru = new List<Scenar>();
        private System.IO.StreamReader objReader;
        private List<double> parametry = new List<double>();
        public ZpracovaniTxt(string fileName) // konstruktor
        {
            string radek;
            objReader = new System.IO.StreamReader(fileName);
            do // prochází řádky, dokud nenarazí na konec souboru
            {
                radek = objReader.ReadLine();
                if (zkratString(radek, 6) == "<nasta")
                {
                    parametry = zpracujNastaveni(radek);
                }
                else if (zkratString(radek, 6) == "</nast")
                {
                    objReader.ReadLine(); // řádek začínající </nast přeskočí
                }
                else if (zkratString(radek, 6) == "<scena")
                {
                    pridejScenar(radek); // pokud řádek začíná na <scena, zpracuje se scénáře
                }
            }
            while (objReader.Peek() != -1);
        }
        public List<Scenar> SeznamScenaru
        {
            get { return seznamScenaru; }
        }
        private string zkratString(string str, int pocet) // zkrátí string str na pocet znaků, pokud je delší
        {
            return str.Substring(0, Math.Min(pocet, str.Length));
        }
        private List<double> zpracujNastaveni(string radek) // zpracuje řádek s nastavením
        {
            List<double> cisla = new List<double>();
            int delka = radek.Length;
            for (int i = 0; i < delka; i++)
            {
                if (char.IsDigit(radek[i]) || radek[i] == '-')
                {
                    string s = "";
                    while (radek[i] != ' ' && !(char.IsLetter(radek[i])) && radek[i] != '>')
                    {
                        s += radek[i];
                        i++;
                        if (i == delka)
                        {
                            break;
                        }
                    }
                    cisla.Add(Convert.ToDouble(s, System.Globalization.CultureInfo.InvariantCulture));
                }
            }
            return cisla;
        }
        private void pridejScenar(string nastaveni) // nacte scenar od <scenar> po </scenar>
        {
            string radek = "";
            List<string> radky = new List<string>();
            radky.Add(nastaveni);
            do
            {
                radek = objReader.ReadLine();
                radky.Add(radek);
            }
            while (zkratString(radek, 6) != "</scen");
            seznamScenaru.Add(new Scenar(radky, parametry));
        }
    }
}
