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

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

        public void SigCreated(MercatorUi.Sig.Sig Sig)
        {
            Sig.PenguinServerBeforeValidateData += Sig_PenguinServerBeforeValidateData;
        }

        void Sig_PenguinServerBeforeValidateData(object sender, MercatorUi.Sig.Sig.PenguinServerBeforeValidateDataEventArgs e)
        {
            MercatorUi.Globals.ApiLogDelegate.Invoke(e.Data["F_NOM"].ToString() + " -> " + e.Data["F_NUM_TVA"].ToString());
            MercatorUi.Sig.Sig Sig = (MercatorUi.Sig.Sig)sender;
            if (string.IsNullOrWhiteSpace(e.Data["F_NOM"].ToString()) && !string.IsNullOrWhiteSpace(e.Data["F_NUM_TVA"].ToString()))
            {
                string vatno = e.Data["F_NUM_TVA"].ToString().Trim().ToUpper();
                if ((vatno.Length > 5) && (
                    vatno.StartsWith("AT") || vatno.StartsWith("BE") || vatno.StartsWith("BG") || vatno.StartsWith("CY") ||
                    vatno.StartsWith("CZ") || vatno.StartsWith("DE") || vatno.StartsWith("DK") || vatno.StartsWith("EE") ||
                    vatno.StartsWith("EL") || vatno.StartsWith("ES") || vatno.StartsWith("FI") || vatno.StartsWith("FR") ||
                    vatno.StartsWith("HU") || vatno.StartsWith("IE") || vatno.StartsWith("IT") ||
                    vatno.StartsWith("LT") || vatno.StartsWith("LU") || vatno.StartsWith("LV") || vatno.StartsWith("MT") ||
                    vatno.StartsWith("NL") || vatno.StartsWith("PL") || vatno.StartsWith("PT") || vatno.StartsWith("RO") ||
                    vatno.StartsWith("SE") || vatno.StartsWith("SI") || vatno.StartsWith("SK")))
                {
                    MercatorController.xFunctions.xViesRet xViesRet = MercatorController.xFunctions.xNumTvaVies(vatno);
                    if (xViesRet == null)
                    {
                        e.BlockingMessage = ($"Erreur durant l'interrogation du service Vies pour vérification du numéro de TVA '{vatno}' !\r\n\r\n{Api.LastError}");
                        return;
                    }
                    if (!xViesRet.Valid)
                    {
                        e.BlockingMessage = ($"Le n° de TVA '{vatno}' n'existe pas !");
                        return;
                    }
                    else if (string.IsNullOrWhiteSpace(xViesRet.Name))
                    {
                        e.BlockingMessage = ($"Le n° de TVA '{vatno}' existe mais aucun nom ne lui est associé !");
                        return;
                    }

                    e.Data["F_NOM"] = xViesRet.Name;
                    e.Data["F_ADRESSE"] = Api.Left(xViesRet.Address, Sig.FieldList["F_ADRESSE"].Length);
                    e.Data["F_ADRESSE2"] = Api.Left(xViesRet.Address2, Sig.FieldList["F_ADRESSE2"].Length);
                    e.Data["F_CODEP"] = xViesRet.PostalCode;
                    e.Data["F_VILLE"] = xViesRet.City;
                }
            }
        }
    }
}