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

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

        /*
         * Cette première méthode est l'implémentation de l'interface IStringUpdater.
         * Elle permet de modifier directement la requête SQL que Mercator se propose d'exécuter par défaut.
         * On ajoute simplement le champ C_SOLDE dans la liste de champs du select de la requête
         */

        public string StringUpdate(string StringToModify)
        {
            StringToModify = StringToModify.Replace(" from CLI", ",C_SOLDE from CLI");
            return StringToModify;
        }
        /*
         * Cette deuxième méthode est l'implémentation de l'interface IFormLoadCustomizer.
         * Comme cette méthode reçoit en paramètre un Form (fenêtre de base - car on peut utiliser cette interface pour divers écrans),
         * il faut d'abord effectuer un cast Form -> SigBrowseForm
         * Ce code ajoute un évènement CellFormatting sur le dataGridView.
         */

        public void FormLoadCustomize(Form WindowsForm)
        {
            MercatorUi.Forms.Sig.SigBrowseForm SigBrowseForm = (MercatorUi.Forms.Sig.SigBrowseForm)WindowsForm;
            SigBrowseForm.dataGridView.CellFormatting += new DataGridViewCellFormattingEventHandler(dataGridView_CellFormatting);
        }

        public void FormClosedCustomize(Form WindowsForm)
        {
            MercatorUi.Forms.Sig.SigBrowseForm SigBrowseForm = (MercatorUi.Forms.Sig.SigBrowseForm)WindowsForm;
            SigBrowseForm.dataGridView.CellFormatting -= new DataGridViewCellFormattingEventHandler(dataGridView_CellFormatting);
        }

        /*
         * Cette méthode est l'implémentation de l'interface IFormGridCustomizer
         * Elle ajoute la colonne c_solde au datagridview
         */

        public void FormGridCustomize(Form WindowsForm)
        {
            MercatorUi.Forms.Sig.SigBrowseForm SigBrowseForm = (MercatorUi.Forms.Sig.SigBrowseForm)WindowsForm;
            SigBrowseForm.dataGridView.Columns.Add("c_solde", "");
            SigBrowseForm.dataGridView.Columns["c_solde"].DataPropertyName = "c_solde";
            SigBrowseForm.dataGridView.Columns["c_solde"].Visible = false;
        }



        void dataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            DataGridView dataGridView = (DataGridView)sender;
            if (dataGridView.Columns.Contains("c_solde") // lorsque l'on rafraîchit la grille, les colonnes sont recréées. Pendant ce temps, la colonne n'existe plus.
            && (dataGridView.Rows[e.RowIndex].Cells["c_solde"].Value != DBNull.Value)) // on vérifie que ce n'est pas une ligne de rupture qui ne contient pas de valeur
            {
                double solde = System.Convert.ToDouble(dataGridView.Rows[e.RowIndex].Cells["c_solde"].Value);
                if (solde < -5000) // en négatif, car un solde débiteur est négatif
                    e.CellStyle.ForeColor = Color.Red;
            }
        }

    }
}