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)
        {
            // modifier la requête SQL pour avoir une colonne supplémentaire avec le pays d'origine du produit (stocké dans S_PAYS_ORI)
            string id = Api.StrExtract(StringToModify, "<ID>", "</ID>");
            if (id.StartsWith("INTRASTAT")) // INTRASTAT_V pour les expéditions et INTRASTAT_A pour les arrivées
                StringToModify = StringToModify.Replace(",stock.s_intrastv as i_code", ",(case when lignes_v.s_pays_ori<>'' then lignes_v.s_pays_ori else i_pays end) as pays_ori,stock.S_INTRASTV as i_code") // dans les select
                    .Replace(",stock.s_intrastv", ",(case when lignes_v.s_pays_ori<>'' then lignes_v.s_pays_ori else i_pays end),stock.s_intrastv") // dans les clauses group
                    .Replace(",stock.s_intrasta as i_code", ",(case when lignes_a.s_pays_ori<>'' then lignes_a.s_pays_ori else i_pays end) as pays_ori,stock.S_INTRASTA as i_code") // dans les select
                    .Replace(",stock.s_intrasta", ",(case when lignes_a.s_pays_ori<>'' then lignes_a.s_pays_ori else i_pays end),stock.s_intrasta") // dans les clauses group
                    .Replace(",lignes_istat.code as i_code", ",pieds_c.i_pays as pays_ori,lignes_istat.code as i_code"); // pour la partie de la requête qui concerne la compta
            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;

                // Ajouter la colonne PAYS_ORI dans la grille
                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)
        {
            // sur chaque ligne du fichier, on ajoute une tabulation et une colonne supplémentaire avec le pays d'origine
            e.FileContent.Append("\t" + e.Dr["pays_ori"].ToString());
        }

    }
}