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


namespace Param
{
    public class Customizer : MercatorUi.ICustomizers.IFormLoadCustomizer, MercatorUi.ICustomizers.ISqlCommandUpdater
    {

        public void FormLoadCustomize(Form WindowsForm)
        {
            if (WindowsForm is MercatorUi.Forms.Param.ParamRayonsForm) // We zitten in het scherm voor de parameterinstelling van de rayons.
            {
                MercatorUi.Forms.Param.ParamRayonsForm paramRayonsForm = (MercatorUi.Forms.Param.ParamRayonsForm)WindowsForm;
                MercatorUi.GridPro.DataGridViewDoubleTextBoxColumn colCoeff = new MercatorUi.GridPro.DataGridViewDoubleTextBoxColumn();
                colCoeff.Name = "colCoeff";
                colCoeff.HeaderText = "Coeff.";
                colCoeff.Width = 80;
                colCoeff.DataPropertyName = "coeff";
                colCoeff.DisplayFormat = "##0.00";
                colCoeff.MinValue = 0;
                colCoeff.MaxValue = 999.99;
                colCoeff.SortMode = DataGridViewColumnSortMode.NotSortable;
                colCoeff.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
                paramRayonsForm.Grid.Columns.Add(colCoeff);
            }
        }

        public void SqlCommandUpdate(System.Data.SqlClient.SqlCommand SqlCommandToModify, Form WindowsForm) // Wijziging van de opdracht voor gegevensopslag
        {
            if (WindowsForm is MercatorUi.Forms.Param.ParamRayonsForm) // We zitten wel degelijk in het scherm voor de parameterinstelling van de rayons.
            {
                if (!SqlCommandToModify.CommandText.Contains("coeff")) // Deze wijziging moet slechts eenmaal worden uitgevoerd. Daarna wordt de gewijzigde opdracht gebruikt voor alle toegevoegde of gewijzigde rijen van het rooster.
                {
                    SqlCommandToModify.CommandText = SqlCommandToModify.CommandText.Replace(",taux_tva=@taux_tva", ",coeff=@coeff,taux_tva=@taux_tva");
                    SqlCommandToModify.CommandText = SqlCommandToModify.CommandText.Replace(",taux_tva)", ",coeff,taux_tva)");
                    SqlCommandToModify.CommandText = SqlCommandToModify.CommandText.Replace(",@taux_tva)", ",@coeff,@taux_tva)");
                }
                MercatorUi.Forms.Param.ParamRayonsForm paramRayonsForm = (MercatorUi.Forms.Param.ParamRayonsForm)WindowsForm;
                string id = SqlCommandToModify.Parameters["@id"].Value.ToString(); // We moeten de ID van de rij kennen om de coëfficiënt te vinden die bij deze rij hoort.
                DataTable dt = (DataTable)paramRayonsForm.Grid.DataSource; // Achter het rooster bevindt zich in feite een DataTable.
                DataRow[] foundRows = dt.Select(string.Format("id='{0}'", Api.UnquoteSql(id))); // De coëfficiënt zoeken op basis van de ID.
                if (foundRows.Length > 0) // In principe zal altijd voldaan zijn aan deze voorwaarde.
                    SqlCommandToModify.Parameters.AddWithValue("@coeff", foundRows[0]["coeff"]); // We voegen de SQL-parameter @coeff met de juiste waarde toe.
            }
        }

    }
}