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

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

        public string StringUpdate(string StringToModify) //modification de la requête de la grille du disponible pour tenir compte d'une nouvelle colonne.
        {
            if (Api.StrExtract(StringToModify, "<ID>", "</ID>") == "STOCKDISPO") // ceci permet de ne modifier que la requête de la grille de disponible, sans modifier les requêtes des autres grilles du signalétique article
            {
                StringToModify = StringToModify.Replace("dispo.stockmax,", "dispo.stockmax,dispo.loc,dispo.loc as loc_old,");
                StringToModify = StringToModify.Replace("sum(stockmax),", "sum(stockmax),'','',");
            }
            return StringToModify;
        }
        
        public void FormLoadCustomize(System.Windows.Forms.Form WindowsForm)
        {
            MercatorUi.Forms.Sig.SigForm sigForm = (MercatorUi.Forms.Sig.SigForm)WindowsForm;
            List<Control> l = sigForm.FindMovableControlsByType(typeof(MercatorUi.Forms.Sig.SigGrids.StockDispo));
            if (l.Count == 0)
                return;
            MercatorUi.Forms.Sig.SigGrids.StockDispo stockDispo = (MercatorUi.Forms.Sig.SigGrids.StockDispo)l[0];
            stockDispo.AfterColumnsCreated += new MercatorUi.MovableControls.MovableGrid.AfterColumnsCreatedHandler(stockDispo_AfterColumnsCreated); //Pour ajouter la nouvelle colonne
            stockDispo.AfterWrite += new MercatorUi.MovableControls.MovableGrid.AfterWriteHandler(stockDispo_AfterWrite); //Pour aller écrire dans la DB les modifications
        }

        public void FormClosedCustomize(System.Windows.Forms.Form WindowsForm)
        {
            MercatorUi.Forms.Sig.SigForm sigForm = (MercatorUi.Forms.Sig.SigForm)WindowsForm;
            List<Control> l = sigForm.FindMovableControlsByType(typeof(MercatorUi.Forms.Sig.SigGrids.StockDispo));
            if (l.Count == 0)
                return;
            MercatorUi.Forms.Sig.SigGrids.StockDispo stockDispo = (MercatorUi.Forms.Sig.SigGrids.StockDispo)l[0];
            stockDispo.AfterColumnsCreated -= new MercatorUi.MovableControls.MovableGrid.AfterColumnsCreatedHandler(stockDispo_AfterColumnsCreated);
            stockDispo.AfterWrite -= new MercatorUi.MovableControls.MovableGrid.AfterWriteHandler(stockDispo_AfterWrite);
        }

        private void stockDispo_AfterColumnsCreated(Object sender, EventArgs e) // ajouter la colonne "Localisation"
        {
            MercatorUi.Forms.Sig.SigGrids.StockDispo stockDispo = (MercatorUi.Forms.Sig.SigGrids.StockDispo)sender;
            stockDispo.Grid.Columns.Add("loc", _Divers.Iif_langue(Globals.Langue, "Localisation", "Localisation", "Localisation"));
            stockDispo.Grid.Columns["loc"].Width = 85;
            stockDispo.Grid.Columns["loc"].ReadOnly = false;
            stockDispo.Grid.Columns["loc"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
            stockDispo.Grid.Columns["loc"].DataPropertyName = "loc";
            stockDispo.Grid.Columns.Add("loc_old", "");
            stockDispo.Grid.Columns["loc_old"].Width = 0;
            stockDispo.Grid.Columns["loc_old"].ReadOnly = true;
            stockDispo.Grid.Columns["loc_old"].DataPropertyName = "loc_old";
            stockDispo.Grid.Columns["loc_old"].Visible = false;
        }

        private void stockDispo_AfterWrite(object sender, EventArgs e)//Pour aller écrire dans la DB les modifications sur la nouvelle colonne
        {
            MercatorUi.Forms.Sig.SigGrids.StockDispo stockDispo = (MercatorUi.Forms.Sig.SigGrids.StockDispo)sender;

            MercatorUi.Forms.Sig.SigForm formStock = (MercatorUi.Forms.Sig.SigForm)stockDispo.Form;
            if (stockDispo.LastIdFilled == formStock.DataSourceRow["s_id"].ToString())
            {
                foreach (DataGridViewRow row in stockDispo.Grid.Rows)
                {
                    if (row.Cells["loc"].Value.ToString().Trim() != row.Cells["loc_old"].Value.ToString().Trim())
                    {
                        SqlCommand oCommand = new SqlCommand("update dispo set loc = @loc where id_stock = @id_stock and id_magasin = @id_magasin");
                        oCommand.Parameters.Add(new SqlParameter("@id_stock", SqlDbType.Char)).Value = formStock.DataSourceRow["s_id"].ToString();
                        oCommand.Parameters.Add(new SqlParameter("@id_magasin", SqlDbType.Char)).Value = row.Cells["id"].Value;
                        oCommand.Parameters.Add(new SqlParameter("@loc", SqlDbType.Char)).Value = row.Cells["loc"].Value;
                        Api.SqlExec(Globals.RepData, oCommand);
                    }
                }
            }
        }
    }
}