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

namespace SigGen
{
    public class Customizer : MercatorUi.ICustomizers.ISigCreated
    {

        public void SigCreated(MercatorUi.Sig.Sig Sig)
        {
            Sig.BeforeSearch += new MercatorUi.Sig.SigClasses.BeforeSearchEventHandler(Sig_BeforeSearch);
        }

        void Sig_BeforeSearch(object sender, MercatorUi.Sig.SigClasses.BeforeSearchEventArgs e)
        {
            Form form = MercatorUi.Globals.Main.WonTopForm();
            if ((form == null) || !(form is MercatorUi.Forms.Booking.BookingForm)) // on n'est pas dans un écran d'écriture comptable
                return;
            MercatorUi.Forms.Booking.BookingForm bookingForm = (MercatorUi.Forms.Booking.BookingForm)form;
            if (bookingForm.BookingEngine == null) // on est dans une écriture comptable mais en mode paramétrage
                return;
            if (bookingForm.BookingEngine.Type != 2) // on n'est pas dans une écriture d'achat
                return;
            if (e.Key != "0") // l'utilisateur n'a pas saisi 0 : donc il veut une recherche normale
                return;
            if (bookingForm.BookingEngine.PIEDS_C["supplier"].ToString().TrimEnd() == "") // le fournisseur n'est pas sélectionné
                return;
            
            StringBuilder sb = new StringBuilder();
            bool premier_fait = false;
            // on prend en compte le champ f_comptea du fournisseur en cours
            if (bookingForm.BookingEngine.FOU["f_comptea"].ToString() != "")
            {
                sb.AppendFormat("(g_id='{0}')", bookingForm.BookingEngine.FOU["f_comptea"]);
                premier_fait = true;
            }
            // on prend en compte les champs f_id_gen0 à f_id_gen9 du fournisseur en cours
            for (int i_gen = 0; i_gen <= 9; i_gen++)
            {
                if (bookingForm.BookingEngine.FOU.Table.Columns.Contains("f_id_gen" + i_gen.ToString()) && (bookingForm.BookingEngine.FOU["f_id_gen" + i_gen.ToString()].ToString() != ""))
                {
                    if (premier_fait)
                        sb.Append(" or ");
                    sb.AppendFormat("(g_id='{0}')", bookingForm.BookingEngine.FOU["f_id_gen" + i_gen.ToString()]);
                    premier_fait = true;
                }
            }
            e.DesiredWhereClause = sb.ToString();
        }

        
    }
}