using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.Schema;
using System.Xml.Serialization;
using GCHR.Model.Konto;
using GCHR.Model.Mandant;

namespace GCHR.Model
{
    [XmlRoot("GCEHRep")]
    public class GchrConfig
    {
        [XmlAttribute(AttributeName = "noNamespaceSchemaLocation", Namespace = XmlSchema.InstanceNamespace)]
        public string NoNamespaceSchemaLocation = "http://dev.global-cube.de/gchr.xsd";

        public static GchrConfig GetInstance(String cfgDatei)
        {
            var serializer = new XmlSerializer(typeof(GchrConfig));
            using (var stream = File.OpenText(cfgDatei))
            {
                var gcsConfig = (GchrConfig)serializer.Deserialize(stream);
                gcsConfig._configDatei = cfgDatei;
                return gcsConfig;
            }
        }

        private string _configDatei;

        public void Save()
        {
            var serializer = new XmlSerializer(typeof(GchrConfig));
            using (var stream = File.CreateText(_configDatei))
            {
                serializer.Serialize(stream, this);
            }
        }

        public string Webservice = "";

        public DateipfadeXml Dateipfade = new DateipfadeXml();

        [XmlElement("Einstellungen")]
        public EinstellungenXml Einstellungen = new EinstellungenXml();

        [XmlArray("Konten")]
        [XmlArrayItem("Konto")]
        public List<HaendlerKonto> Konten;
    }

    [XmlRoot("Einstellungen")]
    public class EinstellungenXml
    {
        public string Haendler = "Autohaus";

        public Mandanten Mandantenname = Mandanten.Opel;
        public string Eurodatanummer = "00000000";

        [XmlElement("Händlernummer")]
        public string Haendlernummer = "000000";

        [XmlElement("Herstellerkontenrahmen", DataType = "int")]
        public int Herstellerkontenrahmen = 5;

        [XmlElement("Händlerkontenrahmen", DataType = "int")]
        public int Haendlerkontenrahmen = 5;

        public string Hauptmarke = "1";
        public string Hauptbetrieb = "01";

        public string BilanzDepartment
        {
            get { return null; }
            set
            {
                BilanzMarke = value.Substring(0, 1);
                BilanzBetrieb = value.Substring(1, 2);
            }
        }

        public string BilanzMarke = "0";
        public string BilanzBetrieb = "07";

        public string BilanzKontoart = "1";

        [XmlElement("Geschäftsjahr")]
        public string Geschaeftsjahr
        {
            get { return _geschaeftsjahr.PadLeft(2, '0'); }
            set { _geschaeftsjahr = value; }
        }

        [XmlElement("ODBC")]
        public string Odbc = "O21";

        [XmlElement("U")]
        public string OdbcUsername = Constants.Encrypt("sa");

        [XmlElement("P")]
        public string OdbcPassword = Constants.Encrypt("");

        public string Datenbank = "deop00";

        public AbfragenXml Abfragen = new AbfragenXml();
        
        [XmlArray("DepartmentÜbersetzung")]
        [XmlArrayItem("Über")]
        public List<UebersetzungXml> DepartmentUebersetzung = new List<UebersetzungXml>();

        public bool KontoOhneUebersetzungUebernehmen;

        public bool StatImport = true;

        public UpdateXml Update;
        public SteuerungsdateienXml Steuerungsdateien;

        private string _geschaeftsjahr;

        public EinstellungenXml()
        {
            Geschaeftsjahr = "01";
        }
    }

    [XmlRoot("Update")]
    public class UpdateXml
    {
        [XmlAttribute("aktiviert", DataType = "boolean")]
        public bool IsActive;
        
        [XmlElement("Dateipfad")]
        public string Dateipfad;

        [XmlElement("Proxy")]
        public ProxyXml Proxy = new ProxyXml();
    }

    [XmlRoot("Proxy")]
    public class ProxyXml
    {
        public string Adresse;
        public string Port;
        public string Benutzer;
        public string Passwort;
        [XmlElement("Domäne")]
        public string Domaene;
    }

    [XmlRoot("Steuerungsdateien")]
    public class SteuerungsdateienXml
    {
        public string Typ = "verzeichnis";
        public string Pfad = "";
    }

    [XmlRoot("Abfragen")]
    public class AbfragenXml
    {
        [XmlElement("AB")] public string SuSaKontenQuery =
            "DVrUHLvXeCt+FJ9iR52w8Nf9GbFBnru0uyqX06FC24LF+LPIjESLb6OLaB+go7HUe3yzHSc7VHszzJ/tfURIvzN7ta6JdXkmjGJcLxxFcExNRfC5iCe0IdyBIgogP3lVyRZdOsCGKpOQ3LAnA8dt1n/kHvOivGCP9JPHwGYoXokkVWXUxDH7eOYRB0pJWGiF3MmC5keteH8lrqTDP9kHFw73QqzjUuDKQukgQd6iwL3DXQY+2W0l5jGX7rVuAHchjUHmahC/8l0+lCvs68VFpwQDRQpKjmPZqriponnOebxL4/G0Lt6yyM4+b1YH2skOinuAw7G7VYNYVNpoapUBBn5LzbupINaU78Tobl2LVYgA4z49KFecfm4iq+Sf+R5Rgp0cQbmnpjm98z88zT6wTOxPHdac2uif8L+3DWUbtZc7OoqgkaFWDvCFf8iKY1XXtgZLchb1Nz2N9nn7nkM5wA4dN5l1UqTT9Xdnfl+pAoP5znuLUeanDecVuPmMX6yzaAalyQRO+Ox5r1EcPLMM8hkK5b0XztZ5TSa9vWpb/NY=";

        [XmlElement("ABS")] public string StatKontenQuery =
            "pAYfFlGeHG/yGbIb2wXh1LFhPVFAI854oD1wfw8Kppuk6FTH1LRAU7jvCUgqLliktrf8tq5ojrLD3lWpiemQ9gisq9FPNpwZS0xnYgYw+JUGAmRvpldbKEQ9gAOHURmVPA1MkJfIAEqWKgQHLkBCvt7DKsdRia1+qxlYoJeVItd1wvr7ICiCdgWhUI/9+ZEzFd/DfFgX03n/3ujJH2JFYo42vYKmRhjmwtiQ5unkJkH02/PdGNTRW18PSfGCsvUlfl8ba176Bt8zYnDS7ILI2K7f50tyDBP3KycmfYzoy3lDZItgCLkJIRGJPRDXSZ/1NISoVJBDpNbMjt6zDgUo2hhsWiCzbhej4U+DO4ZoUhG03TBPgywJuuudLBSO8c2i93/APt0f4kWEg8imluVPjJh16/6HscIc2cr0pRQSwrBJ3ZVKybeyKJ260mzB7p5zYTBAa2EgTBIIYk8YBfTXY+ezFKgv6xgE0ynW7eLtJtd449NLrUZhnYDHzV6heAak9B0cwaL4Y+Xfi5KrHFLMU07rbjavwQNhnChMNcLSyNgpSZFHwiJ5jg==";
    }

    [XmlRoot("Über")]
    public class UebersetzungXml
    {
        [XmlAttribute("von")]
        public string Von;
        [XmlAttribute("nach")]
        public string Nach;
    }
}