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)
        {
            return stringToModify.Replace(" from CLI", ",C_SOLDE from CLI");
        }
        /*
         * 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 form)
        {
            MercatorUi.Forms.Sig.SigBrowseForm sigBrowseForm = (MercatorUi.Forms.Sig.SigBrowseForm)form;
            sigBrowseForm.dataGridView.CellFormatting += DataGridView_CellFormatting;
        }

        public void FormClosedCustomize(Form form)
        {
            MercatorUi.Forms.Sig.SigBrowseForm sigBrowseForm = (MercatorUi.Forms.Sig.SigBrowseForm)form;
            sigBrowseForm.dataGridView.CellFormatting -= 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 form)
        {
            MercatorUi.Forms.Sig.SigBrowseForm sigBrowseForm = (MercatorUi.Forms.Sig.SigBrowseForm)form;
            sigBrowseForm.dataGridView.AddInvisibleColumn("c_solde", "c_solde");
        }

        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 = 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;
            }
        }
    }
}