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

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

        public string StringUpdate(string StringToModify)
        {
            string id = Api.StrExtract(StringToModify, "<ID>", "</ID>");
            if (id == "ALLOWANCES_V")
                return StringToModify.Replace("baremes.*", "baremes.*,dbo.GET_PRIX_TI(ar_ref) as s_prix_ti");
            else
                return StringToModify;
        }

        public void FormLoadCustomize(Form WindowsForm)
        {
            if (WindowsForm is MercatorUi.Forms.Gescom.GescomAllowancesForm)
            {
                MercatorUi.Forms.Gescom.GescomAllowancesForm gescomAllowancesForm = (MercatorUi.Forms.Gescom.GescomAllowancesForm)WindowsForm;
                if (gescomAllowancesForm.TypeVA == MercatorUi.Engine.Gescom.Billing.TypeVAEnum.V) // uniquement pour les remises clients
                {
                    // dans la grille des lignes

                    MercatorUi.GridPro.DataGridViewDoubleTextBoxColumn prix_ti = new MercatorUi.GridPro.DataGridViewDoubleTextBoxColumn();
                    prix_ti.Name = "prix_ti";
                    prix_ti.HeaderText = "Prix Régulier";
                    prix_ti.Width = 85;
                    prix_ti.DataPropertyName = "s_prix_ti";
                    prix_ti.Increment = 0;
                    prix_ti.DisplayFormat = "##0.00";
                    prix_ti.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
                    prix_ti.ReadOnly = true;
                    prix_ti.DefaultCellStyle.ForeColor = System.Drawing.Color.Gray;
                    gescomAllowancesForm.Grid.Columns.Insert(2, prix_ti);

                    gescomAllowancesForm.AfterInsertItem += new MercatorUi.Forms.Gescom.GescomAllowancesForm.AfterInsertItemEventHandler(gescomAllowancesForm_AfterInsertItem);
                    gescomAllowancesForm.Grid.CellValueChanged += new DataGridViewCellEventHandler(grid_CellValueChanged);
                }
            }
        }

        public void FormClosedCustomize(Form WindowsForm)
        {
            if (WindowsForm is MercatorUi.Forms.Gescom.GescomAllowancesForm)
            {
                MercatorUi.Forms.Gescom.GescomAllowancesForm gescomAllowancesForm = (MercatorUi.Forms.Gescom.GescomAllowancesForm)WindowsForm;
                if (gescomAllowancesForm.TypeVA == MercatorUi.Engine.Gescom.Billing.TypeVAEnum.V) // uniquement pour les remises clients
                {
                    gescomAllowancesForm.AfterInsertItem -= new MercatorUi.Forms.Gescom.GescomAllowancesForm.AfterInsertItemEventHandler(gescomAllowancesForm_AfterInsertItem);
                    gescomAllowancesForm.Grid.CellValueChanged -= new DataGridViewCellEventHandler(grid_CellValueChanged);
                }
            }
        }

        // après sélection d'un article, compléter la cellule s_prix_ti. Ce code est aussi exécuté lors de l'import.
        void gescomAllowancesForm_AfterInsertItem(object sender, MercatorUi.Forms.Gescom.GescomAllowancesForm.AfterInsertItemEventArgs e)
        {
            MercatorUi.Forms.Gescom.GescomAllowancesForm gescomAllowancesForm = (MercatorUi.Forms.Gescom.GescomAllowancesForm)sender;
            e.DataRowLignes["s_prix_ti"] = e.DataRowStock["s_prix_ti"];
        }

        // si pour une quelconque raison, l'id article est remis à blanc, alors remettre zéro dans s_prix_ti
        void grid_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            MercatorUi.GridPro.DataGridViewXPro grid = (MercatorUi.GridPro.DataGridViewXPro)sender;
            if ((e.ColumnIndex > -1) && (e.RowIndex > -1) && (grid.Columns[e.ColumnIndex].Name == "ar_ref") && ((grid.Rows[e.RowIndex].Cells[e.ColumnIndex].Value == DBNull.Value) ||  (grid.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString() == "")))
                grid.Rows[e.RowIndex].Cells["prix_ti"].Value = 0;
        }
    }
}