using GTPCorrgir;
using System;
using System.Configuration;
using System.Windows;


namespace GTPCorrgir
{

    public class Opciones
    {
        public enum LLM_a_Usar
        {
            OpenAI,
            Ollama,
            Groq,
            Grok
        }

        [Flags]
        public enum funcionesOpcionales
        {
            None = 0,
            CtrlA = 1 << 0, // Selecciona todo el texto en la ventana activa
            MostrarPopUp = 1 << 1 // Muestra un pop-up con el resultado
        }

        public enum modoDeUso
        {
            Corregir,
            Ortografia,
            Chat,
            Traducir_a_Ingles,
            Traducir_a_Italiano,
            Traducir_a_Espanol,
            Traducir_a_Portugues,
            OCRaTexto,
            Menu,
        }

        public Dictionary<LLM_a_Usar, string> nombreLLM = new Dictionary<LLM_a_Usar, string>
    {
        { LLM_a_Usar.Ollama, "Ollama" },
        { LLM_a_Usar.Groq, "Groq" },
        { LLM_a_Usar.Grok, "Grok" },
        { LLM_a_Usar.OpenAI, "OpenAI" },
    };

        private static Opciones _instance;
        public bool AutoCopy { get; set; }

        public static Opciones Instance
        {
            get
            {
                if (_instance == null)
                {
                    _instance = new Opciones();

                    // Cargar opciones guardadas si existen
                    var savedSettings = MenuSettings.Instance;
                    _instance.LLM = savedSettings.Options.LastUsedLLM;
                    _instance.modo = savedSettings.Options.LastUsedMode;
                    _instance.FuncionesOpcionales = 0;
                    _instance.AutoCopy = true;
                }
                return _instance;
            }
        }

        public LLM_a_Usar LLM { get; set; }
        public modoDeUso modo { get; set; }
        public funcionesOpcionales FuncionesOpcionales { get; set; }

        public string nombreDeLLM()
        {
            return nombreLLM[LLM];
        }

        private Opciones() { }
    }


    public class Program
    {
        [STAThread]
        public static void Main(string[] args)
        {
            var application = new App();

            foreach (var arg in args)
            {
                if (arg.StartsWith("--"))
                {
                    // Procesa el argumento según tus necesidades
                    if (arg.Contains("Ollama"))
                        Opciones.Instance.LLM = Opciones.LLM_a_Usar.Ollama;
                    else if (arg.Contains("Groq"))
                        Opciones.Instance.LLM = Opciones.LLM_a_Usar.Groq;
                    else if (arg.Contains("Grok"))
                        Opciones.Instance.LLM = Opciones.LLM_a_Usar.Grok;
                    else if (arg.Contains("OpenAI"))
                        Opciones.Instance.LLM = Opciones.LLM_a_Usar.OpenAI;

                    if (arg.Contains("CtrlA"))
                        Opciones.Instance.FuncionesOpcionales = Opciones.funcionesOpcionales.CtrlA;
                    if (arg.Contains("PopUp"))
                        Opciones.Instance.FuncionesOpcionales |= Opciones.funcionesOpcionales.MostrarPopUp;

                    if (arg.Contains("Chat"))
                        Opciones.Instance.modo = Opciones.modoDeUso.Chat;
                    if (arg.Contains("Ortografia"))
                        Opciones.Instance.modo = Opciones.modoDeUso.Ortografia;
                    if (arg.Contains("Corregir"))
                        Opciones.Instance.modo = Opciones.modoDeUso.Corregir;
                    if (arg.Contains("Traducir_a_Ingles"))
                        Opciones.Instance.modo = Opciones.modoDeUso.Traducir_a_Ingles;
                    if (arg.Contains("Traducir_a_Italiano"))
                        Opciones.Instance.modo = Opciones.modoDeUso.Traducir_a_Italiano;
                    if (arg.Contains("Traducir_a_Espanol"))
                        Opciones.Instance.modo = Opciones.modoDeUso.Traducir_a_Espanol;
                    if (arg.Contains("Traducir_a_Portugues"))
                        Opciones.Instance.modo = Opciones.modoDeUso.Traducir_a_Portugues;
                    if (arg.Contains("OCRaTexto"))
                        Opciones.Instance.modo = Opciones.modoDeUso.OCRaTexto;
                    if (arg.Contains("AutoCopy"))
                        Opciones.Instance.AutoCopy = true;
                    if (arg.Contains("Menu"))
                        Opciones.Instance.modo = Opciones.modoDeUso.Menu;
                }
            }

            application.Run();
        }
    }

}



