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

namespace SigStock
{
    public class Customizer : MercatorUi.ICustomizers.IFormLoadCustomizer, MercatorUi.ICustomizers.IFormClosedCustomizer, MercatorUi.ICustomizers.IStringUpdater, MercatorUi.ICustomizers.ISqlCommandUpdater
    {
        public string StringUpdate(string StringToModify)
        {
            if (Api.StrExtract(StringToModify, "<ID>", "</ID>") == "STOCKDISPO")
            {
                StringToModify = StringToModify.Replace("dispo.qa_3,", "dispo.qa_3,dispo.stocksai,")
                                               .Replace("sum(qa_3),", "sum(qa_3),sum(stocksai),");
            }
            return StringToModify;
        }

        public void FormLoadCustomize(Form form)
        {
            MercatorUi.Forms.Sig.SigForm SigForm = (MercatorUi.Forms.Sig.SigForm)form;
            List<Control> controls = SigForm.FindMovableControlsByType(typeof(MercatorUi.Forms.Sig.SigGrids.StockDispo));
            if (controls.Count > 0)
            {
                MercatorUi.MovableControls.MovableGrid GridDispo = (MercatorUi.MovableControls.MovableGrid)controls[0];
                GridDispo.AfterColumnsCreated += new MercatorUi.MovableControls.MovableGrid.AfterColumnsCreatedHandler(GridDispo_AfterColumnsCreated);
            }
        }

        public void FormClosedCustomize(Form form)
        {
            MercatorUi.Forms.Sig.SigForm SigForm = (MercatorUi.Forms.Sig.SigForm)form;
            List<Control> controls = SigForm.FindMovableControlsByType(typeof(MercatorUi.Forms.Sig.SigGrids.StockDispo));
            if (controls.Count > 0)
            {
                MercatorUi.MovableControls.MovableGrid GridDispo = (MercatorUi.MovableControls.MovableGrid)controls[0];
                GridDispo.AfterColumnsCreated -= new MercatorUi.MovableControls.MovableGrid.AfterColumnsCreatedHandler(GridDispo_AfterColumnsCreated);
            }
        }

        void GridDispo_AfterColumnsCreated(object sender, EventArgs e)
        {
            MercatorUi.MovableControls.MovableGrid GridDispo = (MercatorUi.MovableControls.MovableGrid)sender;

            MercatorUi.GridPro.DataGridViewDoubleTextBoxColumn c = new MercatorUi.GridPro.DataGridViewDoubleTextBoxColumn();
            c.Name = "stocksai";
            c.HeaderText = "+ Saison";
            c.Width = Api.ValSafeInt(Globals.Params["LARG_DISP2"]);
            c.DisplayFormat = Globals.PictQ;
            c.DataPropertyName = "stocksai";
            c.DefaultCellStyle.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleRight;
            c.Increment = 0;
            GridDispo.Grid.Columns.Add(c);

            GridDispo.Grid.CellValidated += new DataGridViewCellEventHandler(grid_CellValidated);
            GridDispo.Grid.CellEnter += new DataGridViewCellEventHandler(grid_CellEnter);
        }

        void grid_CellValidated(object sender, DataGridViewCellEventArgs e) // Bereken het totaal van de STOCKSAI kolom
        {
            MercatorUi.GridPro.DataGridViewXPro _grid = (MercatorUi.GridPro.DataGridViewXPro)sender;

            if (((e.ColumnIndex > -1) && (_grid.Columns[e.ColumnIndex].Name == "stocksai")) && (!((_grid.Rows[e.RowIndex].Cells["id"].Value != DBNull.Value) && (_grid.Rows[e.RowIndex].Cells["id"].Value.ToString().TrimEnd() == ""))) && (_grid.RowCount > 1))
            {
                DataTable dt = (DataTable)_grid.DataSource;
                DataRow[] foundRowsTotal = dt.Select("ID = ''");
                if (foundRowsTotal.Length == 0)
                    return;
                foundRowsTotal[0][_grid.Columns[e.ColumnIndex].Name] = dt.Compute("Sum(stocksai)", "ID <> ''");
            }
        }

        void grid_CellEnter(object sender, DataGridViewCellEventArgs e) // Zet de cel "Totaal" op read-only in de STOCKSAI kolom
        {
            MercatorUi.GridPro.DataGridViewXPro _grid = (MercatorUi.GridPro.DataGridViewXPro)sender;
            MercatorUi.MovableControls.MovableGrid GridDispo = (MercatorUi.MovableControls.MovableGrid)_grid.Parent;

            if ((e.ColumnIndex > -1) && (_grid.Columns[e.ColumnIndex].Name == "stocksai"))
            {
                if ((_grid.RowCount > 1) && (_grid.Rows[e.RowIndex].Cells["id"].Value != DBNull.Value) && (_grid.Rows[e.RowIndex].Cells["id"].Value.ToString().TrimEnd() == ""))
                    _grid.Columns[e.ColumnIndex].ReadOnly = true;
                else
                    _grid.Columns[e.ColumnIndex].ReadOnly = GridDispo.ReadOnly;
            }
        }

        public void SqlCommandUpdate(System.Data.SqlClient.SqlCommand SqlCommandToModify, Form WindowsForm)
        {
            string id = Api.StrExtract(SqlCommandToModify.CommandText, "<ID>", "</ID>");
            if (id == "UPDATESTOCKDISPO") // Deze SQLCommand wordt uitgevoerd op alle lijnen buiten de Totaal lijn
            {
                MercatorUi.Forms.Sig.SigForm sigForm = (MercatorUi.Forms.Sig.SigForm)WindowsForm;
                MercatorUi.MovableControls.MovableGrid GridDispo = (MercatorUi.MovableControls.MovableGrid)sigForm.FindMovableControlsByType(typeof(MercatorUi.Forms.Sig.SigGrids.StockDispo))[0];
                if (!SqlCommandToModify.CommandText.Contains("@stocksai"))
                    SqlCommandToModify.CommandText = SqlCommandToModify.CommandText.Replace(",stockmax=@stockmax", ",stockmax=@stockmax,stocksai=@stocksai");
                string id_magasin = SqlCommandToModify.Parameters["@id_magasin"].Value.ToString();
                DataRow[] foundRows = ((DataTable)GridDispo.Grid.DataSource).Select(string.Format("id='{0}'", Api.UnquoteSql(id_magasin)));
                SqlCommandToModify.Parameters.AddWithValue("@stocksai", foundRows[0]["stocksai"]);
            }
        }
    }
}