using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorUi;
using MercatorExtensions;

// <CompileWithRoslyn />

namespace Main
{
    public class Customizer : MercatorUi.ICustomizers.IExec
    {
        public void Main(MercatorUi.ICustomizers.ExecAction action)
        {
            if (action == MercatorUi.ICustomizers.ExecAction.DossierOpen)
            {
                Globals.Main.BaseFormCreating += Main_BaseFormCreating;
            }
            else if (action == MercatorUi.ICustomizers.ExecAction.DossierClose)
            {
                Globals.Main.BaseFormCreating -= Main_BaseFormCreating;
            }
        }

        void Main_BaseFormCreating(object sender, MercatorUi.Main.BaseFormCreatingEventArgs e)
        {
            if (e.Form is MercatorUi.Forms.Booking.BookingMatchingForm bookingMatchingForm) // est-on dans la fenêtre des lettrages ?
            {
                bookingMatchingForm.Disposed += BookingMatchingForm_Disposed;
                bookingMatchingForm.Shown += BookingMatchingForm_Shown;
                bookingMatchingForm.ReqSqlCreated += BookingMatchingForm_ReqSqlCreated;
            }
        }

        void BookingMatchingForm_Disposed(object sender, EventArgs e) // cet évènement sert seulement à désinscrire tous les évènements quand on ferme la fenêtre
        {
            MercatorUi.Forms.Booking.BookingMatchingForm bookingMatchingForm = (MercatorUi.Forms.Booking.BookingMatchingForm)sender;
            bookingMatchingForm.Disposed -= BookingMatchingForm_Disposed;
            bookingMatchingForm.Shown -= BookingMatchingForm_Shown;
            bookingMatchingForm.ReqSqlCreated -= BookingMatchingForm_ReqSqlCreated;
        }

        void BookingMatchingForm_Shown(object sender, EventArgs e) // on va ici ajouter la colonne supplémentaire (cet évènement n'est exécuté qu'une seule fois)
        {
            MercatorUi.Forms.Booking.BookingMatchingForm bookingMatchingForm = (MercatorUi.Forms.Booking.BookingMatchingForm)sender;
            bookingMatchingForm.Grid.Columns.Add("red_gen_pc", "% Gescom");
            bookingMatchingForm.Grid.Columns["red_gen_pc"].Width = 60;
            bookingMatchingForm.Grid.Columns["red_gen_pc"].DataPropertyName = "red_gen_pc";
            bookingMatchingForm.Grid.Columns["red_gen_pc"].DefaultCellStyle.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleRight;
            bookingMatchingForm.Grid.Columns["red_gen_pc"].DefaultCellStyle.Format = "##0.00";
        }

        void BookingMatchingForm_ReqSqlCreated(object sender, MercatorUi.Forms.Booking.BookingMatchingForm.ReqSqlCreatedEventArgs e)
        {
            MercatorUi.Forms.Booking.BookingMatchingForm bookingMatchingForm = (MercatorUi.Forms.Booking.BookingMatchingForm)sender;
            if (bookingMatchingForm.Sig.Module == MercatorUi.Sig._SigEnum.CLI) // on modifie la requête uniquement si on lettre des clients
            {
                e.ReqSql.Replace(",cast(0 as bit) as auto_sel", ",cast(0 as bit) as auto_sel,pieds_v.red_gen_pc") // ajouter le champ souhaité dans la table pieds_v
                        .Replace("inner join pieds_c", "left join pieds_v on (lignes_c.id_gescom=pieds_v.journal+str(pieds_v.piece,10))  inner join pieds_c"); // ajouter la jointure sur la table pieds_v
                bookingMatchingForm.Grid.Columns["red_gen_pc"].Visible = true;
            }
            else
            {
                e.ReqSql.Replace(",cast(0 as bit) as auto_sel", ",cast(0 as bit) as auto_sel,0 as red_gen_pc"); // ajouter quand même le champ puisque la grille l'attend
                bookingMatchingForm.Grid.Columns["red_gen_pc"].Visible = false;
            }
        }
    }
}