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

// <CompileWithRoslyn />

namespace Main
{
    public class Customizer : MercatorUi.ICustomizers.IExec, MercatorUi.ICustomizers.IPenginServerInstanceInitialized
    {
        public void Main(MercatorUi.ICustomizers.ExecAction action)
        {
            if (action == MercatorUi.ICustomizers.ExecAction.DossierOpen)
                MercatorOutlook.OutlookStatic.Office365GraphParams = SendMailOffice365GraphParameters;
        }

        public void PenginServerInstanceInitialized()
        {
            MercatorOutlook.OutlookStatic.Office365GraphParams = SendMailOffice365GraphParameters;
        }

        private IneoSmtp.Smtp.SendMailOffice365GraphParameters SendMailOffice365GraphParameters
        {
            get //!\ ne pas mémoriser dans une statique car le clientSecret va changer
            {
                var l = Api.Zselect<(string id, string secret)>(Globals.RepData, "select id,secret from FREE_TABLE_SECRETS where id like 'Off365%'");
                if (l == null)
                    throw new ApplicationException("SendMailOffice365GraphParameters SQL error : " + Api.LastError);
                foreach (string key in new string[4] { "Off365ClId", "Off365ClSe", "Off365Tena", "Off365UId" })
                    if (!l.Any(p => p.id == key))
                        throw new ApplicationException($"SendMailOffice365GraphParameters key \"{key}\" is missing !");
                return new IneoSmtp.Smtp.SendMailOffice365GraphParameters(
                                            l.First(p => p.id == "Off365ClId").secret,
                                            l.First(p => p.id == "Off365ClSe").secret,
                                            l.First(p => p.id == "Off365Tena").secret,
                                            l.First(p => p.id == "Off365UId").secret);
            }
        }
    }
}