
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using XMLParser.Contract;
using XMLParser.Model;
using XMLParser.Functions;
using XMLParser;

namespace XMLProgramm
{
    class Program
    {
        static void Main(string[] args)
        {
            Stopwatch watch = new Stopwatch();
            watch.Start();
            Dictionary<ECalculatedResult,string> headertitles = new Dictionary<ECalculatedResult, string>();
            headertitles.Add(ECalculatedResult.DN150DN250, "DN150 - DN250 [m]");
            headertitles.Add(ECalculatedResult.DN300DN400, "DN300 - DN400 [m]");
            headertitles.Add(ECalculatedResult.DN450DN600, "DN450 - DN600 [m]");
            headertitles.Add(ECalculatedResult.DN650DN800, "DN650 - DN800 [m]");
            headertitles.Add(ECalculatedResult.DN850DN1000,"DN850 - DN1000 [m]");
            headertitles.Add(ECalculatedResult.GESAMTHAUPTKANAL,"Hauptkanal Gesamt [m]");
            headertitles.Add(ECalculatedResult.STRASSENABLAUFANZAHL, "Straßenablauf [Stk]");
            headertitles.Add(ECalculatedResult.STRASSENABLAUFLAENGEZULAGEMETER,"Zulage Länge Straßenablauf über 5m [m]");
            headertitles.Add(ECalculatedResult.SONSTIGEANZAHL,"Anschlussleitung [Stk]");
            headertitles.Add(ECalculatedResult.SONSTIGELAENGEZULAGEMETER,"Zulage Länge Anschlussleitung über 7m [m]");


            if (Debugger.IsAttached)
            {

                IProtokollWriter protokollWriter = new XMLParser.Functions.ProtokollWriter.HTMLProtkollWriter(headertitles);
                XMLParse sers = new XMLParse("2022-02-15_KR_H_L_Oldenburg_Am-Stadtrand.xml");
                var d = sers.KanalObjekte.FindAll(x => x.Inspektionsdaten.OptischeInspektion.Wasserhaltung != EWasserhaltung.NONE);
                IUmsatzCalculator calculators = new XMLParser.Functions.UmsatzCalculator.StrassenUmsatz();
                calculators.Calculate(protokollWriter, sers.KanalObjekte);
                return;
            }


            if(args.Length > 0)
            {
                Console.WriteLine(args[0]);
                IProtokollWriter protokollWriter = new XMLParser.Functions.ProtokollWriter.HTMLProtkollWriter(headertitles);
                XMLParse ser = new XMLParse(args[0]);
                IUmsatzCalculator calculator = new XMLParser.Functions.UmsatzCalculator.StrassenUmsatz();
                calculator.Calculate(protokollWriter,ser.KanalObjekte);
            }
            else
            {
                new XMLParser.Functions.UmsatzCalculator.TagesUmsatz().Calculate(new XMLParser.Functions.TagesUmsatzCSVWriter());
            }
            watch.Stop();
            Console.WriteLine("Total elapsed = "+watch.ElapsedMilliseconds + "ms");
        }
    }
}
