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 les incoterms
            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("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;

                // Ajouter la colonne INCOTERMS dans la grille
                List<MercatorUi._BaseClasses.MercatorComboItem> l = new List<MercatorUi._BaseClasses.MercatorComboItem>();
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("", ""));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Coût et fret", "CFR"));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Coût, assurance et fret", "CIF"));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Port payé, assurance comprise jusqu'à un point de destination", "CIP"));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Port payé jusqu'à un point de destination convenu", "CPT"));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Rendu à terminal", "DAT"));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Rendu à destination", "DAP"));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Rendu droits acquittés", "DDP"));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("A l'usine", "EXW"));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Franco le long du navire", "FAS"));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Franco transporteur", "FCA"));
                l.Add(new MercatorUi._BaseClasses.MercatorComboItem("Franco à bord", "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)
        {
            // vérifier que les incoterms de cette ligne ne sont pas vides
            if (e.Dr["incoterms"].ToString() == "")
            {
                e.Cancel = true; // -> donner l'ordre d'arrêter la génération du fichier
                MercatorUi.Dialogs.Stop(string.Format("Les incoterms de la ligne {0} sont vides !", e.NumLine));
            }
            else
            {
                // sur chaque ligne du fichier, on ajoute une tabulation et une colonne supplémentaire avec les incoterms
                e.FileContent.Append("\t" + e.Dr["incoterms"].ToString());
            }
        }

    }
}