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

// <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.Gescom.GescomDialogs.GescomAskEinvoiceImport gescomAskEinvoiceImport)
            {
                gescomAskEinvoiceImport.ReplacingItem += GescomAskEinvoiceImport_ReplacingItem;
                gescomAskEinvoiceImport.Disposed += GescomAskEinvoiceImport_Disposed;
            }
        }

        private void GescomAskEinvoiceImport_ReplacingItem(object sender, MercatorUi.Forms.Gescom.GescomDialogs.GescomAskEinvoiceImport.ReplacingItemEventArgs e)
        {
            var nodes = e.ItemXmlNode.SelectNodes("cac:Item/cac:SellersItemIdentification/cbc:ID", e.XmlNamespaceManager);
            if ((nodes.Count > 0) && (nodes[0].InnerText == "DDUC42RVV1"))
            {
                e.ReplaceItem("nieuw s_id");
                if (!string.IsNullOrEmpty(e.ErrorWhenReplacingItem))
                    Dialogs.Stop("Fout tijdens het vervangen van het artikel: " + e.ErrorWhenReplacingItem);
            }
        }

        private void GescomAskEinvoiceImport_Disposed(object sender, EventArgs e)
        {
            MercatorUi.Forms.Gescom.GescomDialogs.GescomAskEinvoiceImport gescomAskEinvoiceImport = (MercatorUi.Forms.Gescom.GescomDialogs.GescomAskEinvoiceImport)sender;
            gescomAskEinvoiceImport.ReplacingItem -= GescomAskEinvoiceImport_ReplacingItem;
            gescomAskEinvoiceImport.Disposed -= GescomAskEinvoiceImport_Disposed;
        }
    }
}