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)
        {
            // de SQL-opdracht wijzigen om een bijkomende kolom te hebben met het land van oorsprong van het product (opgeslagen in S_PAYS_ORI)
            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(",stock.s_intrastv as i_code", ",(case when s_pays_ori<>'' then s_pays_ori else i_pays end) as pays_ori,stock.S_INTRASTV as i_code") // in de select
                    .Replace(",stock.s_intrastv", ",(case when s_pays_ori<>'' then s_pays_ori else i_pays end),stock.s_intrastv") // dans les clauses group
                    .Replace(",stock.s_intrasta as i_code", ",(case when s_pays_ori<>'' then s_pays_ori else i_pays end) as pays_ori,stock.S_INTRASTA as i_code") // in de select
                    .Replace(",stock.s_intrasta", ",(case when s_pays_ori<>'' then s_pays_ori else i_pays end),stock.s_intrasta") // in de clauses group
                    .Replace(",lignes_istat.code as i_code", ",pieds_c.i_pays as pays_ori,lignes_istat.code as i_code"); // voor het deel van de opdracht dat betrekking heeft op de boekhouding
            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;

                // De kolom PAYS_ORI in de rooster toevoegen
                MercatorUi.GridPro.DataGridViewUpperCaseTextBoxColumn colPays = new MercatorUi.GridPro.DataGridViewUpperCaseTextBoxColumn();
                colPays.Name = "pays_ori";
                colPays.HeaderText = _Divers.Iif_langue(Globals.Langue, "Land", "Land", "Pays");
                colPays.Width = 40;
                colPays.DataPropertyName = "pays_ori";
                istatDataForm.Grid.Columns.Add(colPays);

                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)
        {
            // op elke lijn van het bestand, wordt een tabulatie en een extra kolom toegevoegd met het land van oorsprong
            e.FileContent.Append("\t" + e.Dr["pays_ori"].ToString());
        }

    }
}