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

// <CompileWithRoslyn />

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

        public void BillingEngineClosed(MercatorUi.Engine.Gescom.BillingEngine billingEngine)
        {
            billingEngine.BeforeSendMail -= BillingEngine_BeforeSendMail;
        }

        void BillingEngine_BeforeSendMail(object sender, MercatorUi.Engine.Gescom.BillingEngine.BeforeSendMailEventArgs e)
        {
            MercatorUi.Engine.Gescom.BillingEngine billingEngine = (MercatorUi.Engine.Gescom.BillingEngine)sender;
            if (!string.IsNullOrEmpty(billingEngine.PiedsVRecord.PIECE_LIEE))
            {
                string reqSql = @"
                    select t.type,t.id,t.journal,t.piece
                        from pieds_v
                        cross apply dbo.DOC_LIES2(pieds_v.doc_lies) t
                        where (pieds_v.id=@id) and (pieds_v.journal=@journal) and (pieds_v.piece=@piece
".UnIndent(5);
                List<(int type, string id, string journal, Int64 piece)> l = Api.Zselect< (int type, string id, string journal, Int64 piece)> (MercatorUi.Globals.RepData, reqSql, new MercatorSqlParam("@id", billingEngine.PiedsVRecord.ID, SqlDbType.Char), new MercatorSqlParam("@journal", billingEngine.PiedsVRecord.JOURNAL, SqlDbType.Char), new MercatorSqlParam("@piece", billingEngine.PiedsVRecord.PIECE));
                if (l != null)
                {
                    foreach ((Int16 type, string id, string journal, Int64 piece) tuple in l)
                    {
                        MercatorUi.Engine.Gescom.Tools.BillingDocDescriptor billingDocDescriptor = new MercatorUi.Engine.Gescom.Tools.BillingDocDescriptor(MercatorUi.Engine.Gescom.Billing.TypeVAEnum.V, tuple.type, tuple.id, tuple.journal, tuple.piece);
                        string lastPdfDuplicateFileName = billingDocDescriptor.LastPdfDuplicateFileName(out string error);
                        if (error != null)
                            MercatorUi.Dialogs.Stop(string.Format("Duplicata PDF {0} {1} : {2}", tuple.journal, tuple.piece, error));
                        else if (lastPdfDuplicateFileName != null)
                            e.Attachments.Add(lastPdfDuplicateFileName);
                    }
                }
            }
        }
    }
}