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

namespace Billing
{
    public class Customizer : MercatorUi.ICustomizers.IBillingEngineCreated, MercatorUi.ICustomizers.IBillingEngineClosed
    {
        public void BillingEngineCreated(MercatorUi.Engine.Gescom.BillingEngine BillingEngine)
        {
            BillingEngine.BeforeBeforePaymentOrSave += BillingEngine_BeforeBeforePaymentOrSave;
        }

        public void BillingEngineClosed(MercatorUi.Engine.Gescom.BillingEngine BillingEngine)
        {
            BillingEngine.BeforeBeforePaymentOrSave -= BillingEngine_BeforeBeforePaymentOrSave;
        }

        private const double minTot = 100;

        private void BillingEngine_BeforeBeforePaymentOrSave(object sender, MercatorUi.Engine.Gescom.BillingEngine.BeforeBeforePaymentOrSaveEventArgs e)
        {
            MercatorUi.Engine.Gescom.BillingEngine billingEngine = (MercatorUi.Engine.Gescom.BillingEngine)sender;
            billingEngine.ChangeAllPrices();
            if (billingEngine.PiedsVRecord.TOT_TTC_DV.CompareTo(minTot, billingEngine.NDec) > 0)
            {
                bool PRIO_PV_changed = false;
                string PRIO_PV = MercatorUi.Globals.Params["PRIO_PV"];

                try
                {
                    if (PRIO_PV != "PROMOSOLDE")
                    {
                        MercatorUi.Globals.Params["PRIO_PV"] = "PROMOSOLDE";
                        PRIO_PV_changed = true;
                    }
                    billingEngine.BaremesVFilterKey = "MIN100";
                    billingEngine.ChangeAllPrices();
                }
                finally
                {
                    billingEngine.BaremesVFilterKey = null;
                    if (PRIO_PV_changed)
                        MercatorUi.Globals.Params["PRIO_PV"] = PRIO_PV;
                }
            }
        }
    }
}