using SanShared;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace KlassenBIB
{
    /// <summary>
    /// Inliner class
    /// 
    /// </summary>
    public sealed class InlinerSanierung : Sanieren, IMakeProtokol
    {
        double kalibrierUnterdruck = -0.5;
        double kalibierWalzenAbstand = 0.9;
        double harzKalibrierTemperatur;
        DateTime datumKalibrierung;
        string harzChargenummer;
        string linerChargenummer;
        string harzTyp;
        string linerTyp;
        double harzbedarf = 1.8;
        uint rueckholgeschwindigkeit = 24;
        bool geschlosseneEnde = false;
        DateTime anfangAushaertung;
        DateTime endeAushaertung;
        string ort;
        string bediener;
        DateTime anfangKalibrierung;
        DateTime endeKalibirierung;
        
        /// <summary>
        /// Gibt den kompletten Harzbedarf auf die Haltungslänge bezogen zurück
        /// </summary>
        public double GetGesamtHarzbedarf(double haltungslaenge)
        {
            return haltungslaenge * harzbedarf;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="projektpfad"></param>
        /// <returns></returns>
        public override string CheckVerzeichnisse(string projektpfad)
        {
            string path = Path.Combine(projektpfad, PfadZurSan);
            if (!Directory.Exists(path)) Directory.CreateDirectory(path);

            string mypath = Path.Combine(path, Verzeichnispfad);
            if (!Directory.Exists(mypath)) Directory.CreateDirectory(mypath);

            return mypath;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="destinationPath"></param>
        /// <param name="projekt">Projekt</param>
        /// <returns></returns>
        public Hashtable MakeProtokoll(string destinationPath, IProjekt projekt)
        {
            Hashtable grunddaten = new Hashtable()
            {
                {"AG_Vorname","" },
                {"KLP_Nummer","" },
                {"KLP_Datum","" },
                {"AG_Ort","" },
                {"AG_Strasse","" },
                {"AG_Ansprechpartner","" },
                {"BM_Ort","" },
                {"BM_Strasse","" },
                {"BM_Schacht_von","" },
                {"BM_Schacht_bis","" },
                {"BM_Haltungsmat","" },
                {"BM_Haltung_DN","" },
                {"BM_Haltunglaenge","" },
                { "KL_Wetter","" },
                { "Temp_Aussen","" },
                { "KL_Temp_Kanal","" },
                { "KL_Gen","" },
                { "KL_WH","" },
                { "KL_STVO","" },
                { "KL_HD_true","" },
                { "KL_mech_true","" },
                { "KL_rob_true","" },
                { "KL_HD_date","" },
                { "KL_Besatzung", "" },
                {"liner_laenge","" },
                {"Charge_Liner","" },
                {"Charge_Harz","" },
                {"harz_bedarf_m","" },
                {"gesamt_harz","" },
                {"temperatur_harz","" },
                {"datum_kalibrierung","" },
                {"walzen_abstand","" },
                {"vakuum","" },
                {"time_start","" },
                {"time_ende","" },
                {"UVImageTemp","" },
                {"UVImageDruck","" },
                {"liner_type","" },
                {"rueckhol_speed","" },
                {"harz_type","" }
            };

            double LaengeGesamt = this.Inspektionsobjekt.Haltungslaenge + this.Inspektionsobjekt.Schachtlaenge;


            grunddaten["AG_Vorname"] = projekt.Auftraggeber.Name;
            grunddaten["KLP_Nummer"] = "";
            grunddaten["KLP_Datum"] = DateTime.Now.ToShortDateString();
            grunddaten["AG_Ort"] = projekt.Auftraggeber.Ort;
            grunddaten["AG_Strasse"] = projekt.Auftraggeber.Strasse;
            grunddaten["AG_Ansprechpartner"] = projekt.Auftraggeber.Ansprechpartner;
            grunddaten["BM_Ort"] = Inspektionsobjekt.OrtName;
            grunddaten["BM_Strasse"] = Inspektionsobjekt.StrasseName;
            grunddaten["BM_Schacht_von"] = Inspektionsobjekt.VonPunkt;
            grunddaten["BM_Schacht_bis"] = Inspektionsobjekt.BisPunkt ;
            grunddaten["BM_Haltungsmat"] = Inspektionsobjekt.RohrMaterial;
            grunddaten["BM_Haltung_DN"] = Inspektionsobjekt.Kanalrohrweite;
            grunddaten["BM_Haltunglaenge"] = Inspektionsobjekt.Haltungslaenge;
            grunddaten["KL_Wetter"] = this.Wetter;
            grunddaten["Temp_Aussen"] = this.TempAusen;
            grunddaten["KL_Temp_Kanal"] = this.TempKanal;
            grunddaten["KL_Gen"] = this.GenehmigungVorhanden ? "ja" : "nein";
            grunddaten["KL_WH"] = this.WasserhaltungEingerichtet ? "ja" : "nein";
            grunddaten["KL_STVO"] = this.STVOAbsicherung ? "ja" : "nein";
            grunddaten["KL_HD_true"] = this.HDReinigung ? "X" : "";
            grunddaten["KL_mech_true"] = this.VorbereitetMechanisch ? "X": "";
            grunddaten["KL_rob_true"] = this.VorbereitetRoboter ? "X": "";
            grunddaten["KL_HD_date"] = this.Datum.ToShortDateString();
            grunddaten["KL_Besatzung"] = this.Besatzung;
            grunddaten["liner_laenge"] = Inspektionsobjekt.Haltungslaenge; //LaengeGesamt;
            grunddaten["Charge_Liner"] = this.LinerChargenummer;
            grunddaten["Charge_Harz"] = this.HarzChargenummer;
            grunddaten["harz_bedarf_m"] = harzbedarf;
            grunddaten["gesamt_harz"] = Inspektionsobjekt.Haltungslaenge * harzbedarf;
            grunddaten["temperatur_harz"] = this.HarzKalibrierTemperatur;
            grunddaten["datum_kalibrierung"] = this.DatumKalibrierung.ToShortDateString();
            grunddaten["walzen_abstand"] = this.KalibierWalzenAbstand;
            grunddaten["vakuum"] = this.KalibrierUnterdruck;
            grunddaten["time_start"] = this.AnfangAushaertung;
            grunddaten["time_ende"] = this.EndeAushaertung;
            grunddaten["UVImageTemp"] = Path.Combine(destinationPath, "linerGraph_temp.jpg");
            grunddaten["UVImageDruck"] = Path.Combine(destinationPath, "linerGraph_druck.jpg");
            grunddaten["rueckhol_speed"] = rueckholgeschwindigkeit;
            grunddaten["liner_type"] = LinerTyp;
            grunddaten["harz_type"] = HarzTyp;
            return grunddaten;
        }
        /// <summary>
        /// 
        /// </summary>
        public InlinerSanierung()
        {
            //datumKalibrierung = new DateTime();
            Verzeichnispfad = "UVAnlage";
            if (datumKalibrierung <= DateTime.MinValue || datumKalibrierung >= DateTime.MaxValue) datumKalibrierung = DateTime.Now;
        }
        /// <summary>
        /// 
        /// </summary>
        public double KalibrierUnterdruck { get => kalibrierUnterdruck; set => kalibrierUnterdruck = value; }
        /// <summary>
        /// 
        /// </summary>
        public double KalibierWalzenAbstand { get => kalibierWalzenAbstand; set => kalibierWalzenAbstand = value; }
        /// <summary>
        /// 
        /// </summary>
        public double HarzKalibrierTemperatur { get => harzKalibrierTemperatur; set => harzKalibrierTemperatur = value; }
        /// <summary>
        /// 
        /// </summary>
        public DateTime DatumKalibrierung
        {
            get
            {
                Trace.WriteLine("DatumKali abgefragt");
                return datumKalibrierung;
            }
            set
            {
                Trace.WriteLine("Datum kali gesetzt");
                datumKalibrierung = value;
            }
        }
        /// <summary>
        /// 
        /// </summary>
        public string HarzChargenummer { get => harzChargenummer; set => harzChargenummer = value; }
        /// <summary>
        /// 
        /// </summary>
        public string LinerChargenummer { get => linerChargenummer; set => linerChargenummer = value; }
        /// <summary>
        /// 
        /// </summary>
        public double Harzbedarf { get => harzbedarf; set => harzbedarf = value; }
        /// <summary>
        /// 
        /// </summary>
        public uint Rueckholgeschwindigkeit { get => rueckholgeschwindigkeit; set => rueckholgeschwindigkeit = value; }
        /// <summary>
        /// 
        /// </summary>
        public bool GeschlosseneEnde { get => geschlosseneEnde; set => geschlosseneEnde = value; }
        /// <summary>
        /// 
        /// </summary>
        public double HarzBedarf { get => harzbedarf; set => harzbedarf = value; }
        /// <summary>
        /// 
        /// </summary>
        public string HarzTyp { get => harzTyp; set => harzTyp = value; }
        /// <summary>
        /// 
        /// </summary>
        public string LinerTyp { get => linerTyp; set => linerTyp = value; }
        /// <summary>
        /// 
        /// </summary>
        public DateTime AnfangAushaertung { get => anfangAushaertung; set => anfangAushaertung = value; }
        /// <summary>
        /// 
        /// </summary>
        public DateTime EndeAushaertung { get => endeAushaertung; set => endeAushaertung = value; }
        /// <summary>
        /// 
        /// </summary>
        public string Ort { get => ort; set => ort = value; }
        /// <summary>
        /// 
        /// </summary>
        public string Bediener { get => bediener; set => bediener = value; }
        /// <summary>
        /// 
        /// </summary>
        public DateTime AnfangKalibrierung { get => anfangKalibrierung; set => anfangKalibrierung = value; }
        /// <summary>
        /// 
        /// </summary>
        public DateTime EndeKalibirierung { get => endeKalibirierung; set => endeKalibirierung = value; }
    }
}
