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
    {

        /*
         * Deze eerste methode is de implementatie van de interface IStringUpdater.
          * Hiermee kunt u rechtstreeks de SQL-opdracht wijzigen die Mercator standaard voorstelt voor uitvoering.
         * Men voegt gewoon het veld C_SOLDE toe in de lijst met velden van de select van de opdracht
         */

        public string StringUpdate(string StringToModify)
        {
            StringToModify = StringToModify.Replace(" from CLI", ",C_SOLDE from CLI");
            return StringToModify;
        }
        /*
         * Deze tweede methode is de implementatie van de interface IFormLoadCustomizer.
         * Aangezien deze methode een Form als parameter krijgt (basisvenster, want we kunnen deze interface gebruiken voor diverse schermen),
         * moet er eerst een cast Form -> SigBrowseForm worden gerealiseerd.
         * Deze code voegt een CellFormatting-event toe aan het 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);
        }

        /*
         * Deze methode is de implementatie van de interface IFormGridCustomizer
         * Ze voegt de kolom c_solde toe aan het 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") // Bij het vernieuwen van het rooster worden de kolommen opnieuw gecreĆ«erd. In die tussentijd bestaat de kolom niet meer.
            && (dataGridView.Rows[e.RowIndex].Cells["c_solde"].Value != DBNull.Value)) // Men controleert dat het geen scheidingslijn is zonder
            {
                double solde = System.Convert.ToDouble(dataGridView.Rows[e.RowIndex].Cells["c_solde"].Value);
                if (solde < -5000) // negatieve waarde, want een debetsaldo is negatief
                    e.CellStyle.ForeColor = Color.Red;
            }
        }

    }
}