using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorUi;
using System.Windows.Forms;
// <CompileWithRoslyn />

namespace SigGen
{
    public class Customizer : MercatorUi.ICustomizers.ISigCreated
    {
        public void SigCreated(MercatorUi.Sig.Sig sig)
        {
            sig.BeforeSearch += Sig_BeforeSearch;
        }

        void Sig_BeforeSearch(object sender, MercatorUi.Sig.SigClasses.BeforeSearchEventArgs e)
        {
            Form form = Globals.Main.WonTopForm();
            if ((form == null) || !(form is MercatorUi.Forms.Booking.BookingForm bookingForm)) // u bevindt zich niet in een boekingsscherm
                return;
            if (bookingForm.BookingEngine == null) // u bevindt zich in een boeking maar wel in configuratiemodus
                return;
            if (bookingForm.BookingEngine.Type != 2) // u bevindt zich niet in een aankoopboeking
                return;
            if (e.Key != "0") // de gebruiker heeft geen 0 ingegeven: hij wil dus een gewone zoekopdracht
                return;
            if (bookingForm.BookingEngine.PiedsCRecord.SUPPLIER == "") // de leverancier werd niet geselecteerd
                return;
            
            StringBuilder sb = new StringBuilder();
            bool premier_fait = false;
            // er wordt rekening gehouden met het veld f_comptea van de huidige leverancier
            if (bookingForm.BookingEngine.FouRecord.F_COMPTEA != "")
            {
                sb.AppendFormat("(g_id='{0}')", bookingForm.BookingEngine.FouRecord.F_COMPTEA);
                premier_fait = true;
            }
            // er wordt rekening gehouden met de velden f_id_gen0 tot f_id_gen9 van de huidige leverancier
            for (int i_gen = 0; i_gen <= 9; i_gen++)
            {
                if (bookingForm.BookingEngine.FOU.Table.Columns.Contains("f_id_gen" + i_gen) && (bookingForm.BookingEngine.FOU["f_id_gen" + i_gen].ToString() != ""))
                {
                    if (premier_fait)
                        sb.Append(" or ");
                    sb.AppendFormat("(g_id='{0}')", bookingForm.BookingEngine.FOU["f_id_gen" + i_gen]);
                    premier_fait = true;
                }
            }
            e.DesiredWhereClause = sb.ToString();
        }
    }
}