using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorUi;
using System.Windows.Forms;

namespace Intrastat
{
    public class Customizer : MercatorUi.ICustomizers.IStringUpdater, MercatorUi.ICustomizers.IFormLoadCustomizer, MercatorUi.ICustomizers.IFormClosedCustomizer
    {

        public string StringUpdate(string StringToModify)
        {
            // SQL-opdracht wijzigen om een bijkomende kolom met de incoterms te hebben
            string id = Api.StrExtract(StringToModify, "<ID>", "</ID>");
            if (id.StartsWith("INTRASTAT")) // INTRASTAT_V voor uitgaande goederen en INTRASTAT_A voor inkomende goederen
                StringToModify = StringToModify.Replace("unitesuppl,", "unitesuppl,incoterms,");
            return StringToModify;
        }

        public void FormLoadCustomize(System.Windows.Forms.Form WindowsForm)
        {
            if (WindowsForm is MercatorUi.Forms.Istat.IstatDataForm)
            {
                MercatorUi.Forms.Istat.IstatDataForm istatDataForm = (MercatorUi.Forms.Istat.IstatDataForm)WindowsForm;

                // Voeg de kolom INCOTERMS toe in de rooster
                List<MercatorUi._BaseClasses.MercatorComboItem> l = new List<MercatorUi._BaseClasses.MercatorComboItem>();
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("", ""));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Kost en vracht", "CFR"));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Kost, verzekering en vracht", "CIF"));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Vrachtvrij inclusief verzekering tot tot een bepaalde bestemming", "CIP"));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Vrachtvrij inclusief verzekering tot een overeengekomen bestemming", "CPT"));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Franco terminal", "DAT"));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Franco bestemming", "DAP"));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Franco inclusief rechten", "DDP"));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Af fabriek", "EXW"));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Franco langszij schip", "FAS"));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Franco vervoerder", "FCA"));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Vrij aan boord", "FOB"));
                DevComponents.DotNetBar.Controls.DataGridViewComboBoxExColumn colIncoterms = new DevComponents.DotNetBar.Controls.DataGridViewComboBoxExColumn();
                colIncoterms.Name = "incoterms";
                colIncoterms.HeaderText = "Incoterms";
                colIncoterms.Width = 150;
                colIncoterms.DataPropertyName = "incoterms";
                colIncoterms.DisplayMember = "Description";
                colIncoterms.ValueMember = "Id";
                colIncoterms.DataSource = l;
                colIncoterms.DropDownStyle = ComboBoxStyle.DropDownList;
                istatDataForm.Grid.Columns.Add(colIncoterms);

                istatDataForm.LineAddedToFile += new MercatorUi.Forms.Istat.IstatDataForm.LineAddedToFileEventHandler(istatDataForm_LineAddedToFile);
            }
        }

        public void FormClosedCustomize(System.Windows.Forms.Form WindowsForm)
        {
            if (WindowsForm is MercatorUi.Forms.Istat.IstatDataForm)
            {
                MercatorUi.Forms.Istat.IstatDataForm istatDataForm = (MercatorUi.Forms.Istat.IstatDataForm)WindowsForm;
                istatDataForm.LineAddedToFile -= new MercatorUi.Forms.Istat.IstatDataForm.LineAddedToFileEventHandler(istatDataForm_LineAddedToFile);
            }
        }

        void istatDataForm_LineAddedToFile(object sender, MercatorUi.Forms.Istat.IstatDataForm.LineAddedToFileEventArgs e)
        {
            // nagaan of de incoterms van deze lijn niet leeg zijn
            if (e.Dr["incoterms"].ToString() == "")
            {
                e.Cancel = true; // -> de opdracht geven om het genereren van het bestand te stoppen
                MercatorUi.Dialogs.Stop(string.Format("De incoterms van de lijn {0} zijn leeg!", e.NumLine));
            }
            else
            {
                // op elke lijn van het bestand wordt een tabulatie en een extra kolom met de incoterms toegevoegd
                e.FileContent.Append("\t" + e.Dr["incoterms"].ToString());
            }
        }

    }
}