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

// <CompileWithRoslyn />

namespace MercatorUi.MovableControls.ButtonsCodes
{
    public static class Script
    {

        public static void Exec(MercatorUi.MovableControls.MovableButton clickedButton)
        {
            // enter your customized code here
            Forms.Action.ActionForm actionForm = (Forms.Action.ActionForm)clickedButton.Form;
            Engine.Crm.ActionEngine actionEngine = actionForm.ActionEngine;

            if (string.IsNullOrWhiteSpace(actionEngine.ActionsRecord.NOTE))
            {
                MovableTextBox textBoxNote = actionForm.MovableControls.Values.OfType<MovableTextBox>().First(p => p.Source == "NOTE");
                _Divers.FocusError(textBoxNote);
                return;
            }
            MercatorAI.FactoryOpenAI factory = new MercatorAI.FactoryOpenAI();
            MercatorAI.Interfaces.IOpenAiChat openAiChat = factory.CreateOpenAiChat("gpt-5-mini", actionEngine.ActionsRecord.RESULTAT, out string error); // actionEngine.ActionsRecord.RESULTAT contient la conversation sous forme json
            if (!string.IsNullOrEmpty(error))
            {
                Dialogs.Stop("Kan de OpenAI-chat niet initialiseren: " + error);
                return;
            }

            Wait.WaitStatic.WaitWindowBaseThread(Api.Iif_langue(Globals.Langue, IifLangueEnum.AIisThinking));
            string ret = "Geen antwoord";
            _BaseClasses.ExclusiveBackgroundWorkerAsync exclusiveBackgroundWorkerAsync = new _BaseClasses.ExclusiveBackgroundWorkerAsync(async () => ret = await openAiChat.AskAsync(actionEngine.ActionsRecord.NOTE.Trim(),
                responseFormat: MercatorAI.Tools.ChatResponseFormat.HtmlContent,
            systemMessage: actionEngine.ActionsRecord.RESULTAT == "" ? "Je bent een assistent die vragen beantwoordt als onderdeel van mijn bedrijf genaamd Widget nv." : ""), formWhereToCenterLoadingCircle: actionForm);

            Wait.WaitStatic.WaitClearBaseThread();
            if (exclusiveBackgroundWorkerAsync.ExceptionDuringDoWork != null)
            {
                Dialogs.Stop(exclusiveBackgroundWorkerAsync.ExceptionDuringDoWork.Message);
                return;
            }

            actionEngine.ActionsRecord.HTML =
                "<div style=\"margin-top: 25px; margin-bottom: 25px; padding: 25px 15px; border-radius: 10px; background-color: rgb(249, 246, 241);\">"
                + actionEngine.ActionsRecord.NOTE.Trim().Replace("\r\n", "<br>")
                + "</div>"
                + "<div style=\"padding: 0px 15px 0px 15px;\">"
                + ret
                + "</div>"
                + (actionEngine.ActionsRecord.HTML != "" ? "<hr style=\"margin-top: 25px; margin-bottom: 25px\">" + actionEngine.ActionsRecord.HTML : "");
            actionEngine.ActionsRecord.RESULTAT = openAiChat.ConversationJson;
            actionEngine.ActionsRecord.NOTE = "";
        }
    }
}