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

namespace XMLParser.Functions.UmsatzCalculator 
{
    public class TagesUmsatz : IUmsatzCalculator
    {
        List<KanalObjekt> _kanalObjekte;
        public List<KanalObjekt> Kanalobjekte { get => _kanalObjekte; set => _kanalObjekte = value; }

        public void Calculate(IProtokollWriter protokollWriter, List<KanalObjekt> objekte = null)
        {
            DirectoryInfo info = new DirectoryInfo("./");
            FileInfo[] daten = info.GetFiles("*.xml");
            if(objekte == null) {
                objekte = new List<KanalObjekt>();
            }
            foreach(FileInfo aktuell in daten) {
                XMLParse ser = new XMLParse(aktuell.FullName);
                objekte.AddRange(ser.KanalObjekte);
            }
            Kanalobjekte = objekte;
            IEnumerable<string> datums = objekte.OrderBy(d => d.Inspektionsdaten.OptischeInspektion.Inspektionstime).Select(x => x.Inspektionsdaten.OptischeInspektion.Inspektionsdatum).Distinct();
            
            decimal gesamt = 0.0m;
            //Dictionary<string,decimal> s = CalculateDay(objekte.FindAll(x => x.Inspektionsdaten.OptischeInspektion.Inspektionsdatum.Equals("05.08.2021")));
            foreach(string datum in datums) {
                List<KanalObjekt> InspektionenAmTag = objekte.FindAll(x => x.Inspektionsdaten.OptischeInspektion.Inspektionsdatum.Equals(datum));
                Dictionary<ECalculatedResult,decimal> s = XMLParser.Functions.Calculate.CalculateDay(InspektionenAmTag);
                protokollWriter.WriteEntry(s,InspektionenAmTag);
                Console.WriteLine("Umsatz am : "+datum + " " + s[ECalculatedResult.GESAMTUMSATZ]);
                gesamt +=s[ECalculatedResult.GESAMTUMSATZ];
                //if(datum.Equals("20.08.2021")) Debugger.Break();
            }
            int anzahlTage = datums.Count();
            decimal Durchschnitt = gesamt / anzahlTage;
            int prognosedays = 63;
            Console.WriteLine(string.Format("Tage : {0} \nGesamt umsatz: {1}\nDurchschnitt : {2}\nPrognose für {3} tage {4}",anzahlTage,gesamt,Durchschnitt,prognosedays,prognosedays*Durchschnitt));
        }
    }
}
