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("GB") || 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")))
                {
                    string countryCode = vatno.Substring(0, 2);
                    string vatNumber = vatno.Substring(2);
                    bool valid = false;
                    string name;
                    string address;
                    MercatorTunnel.eu.europa.ec.checkVatService checkVatService = new MercatorTunnel.eu.europa.ec.checkVatService();
                    try
                    {
                        checkVatService.checkVat(ref countryCode, ref vatNumber, out valid, out name, out address);
                    }
                    catch (Exception ex)
                    {
                        e.BlockingMessage = "CheckVatService : " + ex.Message;
                        return;
                    }
                    if (!valid)
                    {
                        e.BlockingMessage = "Het BTW NR bestaat NIET!";
                        return;
                    }
                    e.Data["F_NOM"] = Api.Left(name, Sig.FieldList["F_NOM"].Length);
                    address = address.Replace("ÿ", "\n");
                    e.Data["F_ADRESSE"] = Api.Left(Api.StrExtract(address + "\n", "", "\n"), Sig.FieldList["F_ADRESSE"].Length);
                    string adr2 = Api.StrExtract(address + "\n", "\n", "\n");
                    string adr3 = Api.StrExtract(address + "\n", "\n", "\n", 2);
                    string cp_ville = adr2;
                    if (!string.IsNullOrEmpty(adr3))
                    {
                        cp_ville = adr3;
                        e.Data["F_ADRESSE2"] = Api.Left(adr2, Sig.FieldList["F_ADRESSE2"].Length);
                    }
                    e.Data["F_CODEP"] = Api.StrExtract("|" + cp_ville, "|", " ").Trim();
                    e.Data["F_VILLE"] = Api.StrExtract(cp_ville + "|", " ", "|").Trim();
                }
            }
        }
    }
}