using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Exferia_Aplicacion.Visualizacion;
using Exferia_Aplicacion.General;
using Exferia_Aplicacion.Terminal;
using Exferia_EntityFramework;

namespace Exferia_General._3_Vistas.ControlesPersonalizados_DentroPaneles
{
    public partial class CTU_P_Terminales_Opciones_CheckBox_Varios : UserControl
    {
        #region Variables privadas
        private Terminal_Opcion_Modelo g_mdl_Terminal_Opcion_Modelo = null;
        private GEN_Terminales_Opciones g_mdl_GEN_Terminales_Opciones = null;

        #region Valores
        private int g_int_CTU_P_Terminales_Opciones_Valor_CheckBox_PosicionY = 2;
        private int g_int_CTU_P_Terminales_Opciones_Valor_CheckBox_Alto = 21;
        private int g_int_CTU_P_Terminales_Opciones_Valor_CheckBox_Cantidad = 0;
        private List<int> g_lst_CTU_P_Terminales_Opciones_Valor_CheckBox = new List<int>();
        #endregion
        #endregion

        #region Constructor
        public CTU_P_Terminales_Opciones_CheckBox_Varios(Terminal_Opcion_Modelo _mdl_Terminal_Opcion_Modelo, GEN_Terminales_Opciones _mdl_GEN_Terminales_Opciones)
        {
            InitializeComponent();
            Repintar.Empezar(this);

            //Variables Recibidas
            g_mdl_Terminal_Opcion_Modelo = _mdl_Terminal_Opcion_Modelo;
            g_mdl_GEN_Terminales_Opciones = _mdl_GEN_Terminales_Opciones;

            //Cargar los valors
            Cargar();
        }
        #endregion

        #region Cargar
        private void Cargar()
        {
            try
            {
                //Opcion
                ex_lbl_Opcion.Text = "[" + g_mdl_Terminal_Opcion_Modelo.opcionGrupo.Descripcion + "] " + g_mdl_Terminal_Opcion_Modelo.opcion.Descripcion;

                //poner los valores
                foreach (Terminal_Opcion_ListadoValores_Modelo mdl_Terminal_Opcion_ListadoValores_Modelo in g_mdl_Terminal_Opcion_Modelo.opcionValores)
                {
                    Crear_Valores(mdl_Terminal_Opcion_ListadoValores_Modelo);
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(CTU_P_Terminales_Opciones_CheckBox_Varios) + "/" + nameof(Cargar));
            }
        }
        #endregion

        #region Valores
        public void Crear_Valores(Terminal_Opcion_ListadoValores_Modelo _mdl_Terminal_Opcion_ListadoValores_Modelo)
        {
            try
            {
                g_int_CTU_P_Terminales_Opciones_Valor_CheckBox_Cantidad += 1;

                //Calcular tamaño el panel ...........................................................................
                int int_AnchoPanelprincipal = (693 * pnl_Valores.Width) / 698;
                if (pnl_Valores.Controls.Count > 0 && g_lst_CTU_P_Terminales_Opciones_Valor_CheckBox.Count > 0)
                {
                    int_AnchoPanelprincipal = pnl_Valores.Controls.Find("controlusuario_CTU_P_Terminales_Opciones_Valor_CheckBox" + g_lst_CTU_P_Terminales_Opciones_Valor_CheckBox[0], false).FirstOrDefault().Width;
                }
                //....................................................................................................

                //Valor de BD
                GEN_Terminales_Opciones mdl_GEN_Terminales_Opciones = null;
                if (g_mdl_GEN_Terminales_Opciones != null &&
                    g_mdl_GEN_Terminales_Opciones.valores != null &&
                    g_mdl_GEN_Terminales_Opciones.valores.Trim().Length > 0)
                {
                    string[] arr_Valores = g_mdl_GEN_Terminales_Opciones.valores.Split('|');

                    foreach (string str_Valor in arr_Valores)
                    {
                        string[] arr_Opcion_Valor = str_Valor.Split(',');

                        if (arr_Opcion_Valor!=null && 
                            arr_Opcion_Valor.Count()>1 &&
                            arr_Opcion_Valor[0].Contains(_mdl_Terminal_Opcion_ListadoValores_Modelo.valorCodigo))
                        {
                            mdl_GEN_Terminales_Opciones = g_mdl_GEN_Terminales_Opciones;
                            break;
                        }
                    }
                }

                //Objeto Personalizado ...............................................................................
                int int_posicionRelativa = g_int_CTU_P_Terminales_Opciones_Valor_CheckBox_PosicionY + (pnl_Valores.DisplayRectangle.Y);
                CTU_P_Terminales_Opciones_Valor_CheckBox controlusuario_CTU_P_Terminales_Opciones_Valor_CheckBox = new CTU_P_Terminales_Opciones_Valor_CheckBox(g_int_CTU_P_Terminales_Opciones_Valor_CheckBox_Cantidad, _mdl_Terminal_Opcion_ListadoValores_Modelo, mdl_GEN_Terminales_Opciones);
                controlusuario_CTU_P_Terminales_Opciones_Valor_CheckBox.Name = "controlusuario_CTU_P_Terminales_Opciones_Valor_CheckBox" + g_int_CTU_P_Terminales_Opciones_Valor_CheckBox_Cantidad;
                controlusuario_CTU_P_Terminales_Opciones_Valor_CheckBox.Size = new System.Drawing.Size(int_AnchoPanelprincipal, g_int_CTU_P_Terminales_Opciones_Valor_CheckBox_Alto);
                controlusuario_CTU_P_Terminales_Opciones_Valor_CheckBox.Location = new Point(7, int_posicionRelativa);
                controlusuario_CTU_P_Terminales_Opciones_Valor_CheckBox.Anchor = (System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right | System.Windows.Forms.AnchorStyles.Left);
                //....................................................................................................

                //Añadir al panel Principal
                pnl_Valores.Controls.Add(controlusuario_CTU_P_Terminales_Opciones_Valor_CheckBox);

                //Sumar la altura y la separacion separacion para  agregar el siguiente control
                g_int_CTU_P_Terminales_Opciones_Valor_CheckBox_PosicionY += (g_int_CTU_P_Terminales_Opciones_Valor_CheckBox_Alto + 2);

                //Agregar numero del objeto creado
                g_lst_CTU_P_Terminales_Opciones_Valor_CheckBox.Add(g_int_CTU_P_Terminales_Opciones_Valor_CheckBox_Cantidad);
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(CTU_P_Terminales_Opciones_CheckBox_Varios) + "/" + nameof(Crear_Valores));
            }
        }
        #endregion

        #region Obtener para Grabar
        public GEN_Terminales_Opciones Obtener_A_Grabar(long _lng_idTerminal)
        {
            GEN_Terminales_Opciones mdl_GEN_Terminales_Opciones = null;

            try
            {
                //Recorrer las respustas por si hay alguna checkeada
                if (g_lst_CTU_P_Terminales_Opciones_Valor_CheckBox!= null && g_lst_CTU_P_Terminales_Opciones_Valor_CheckBox.Count > 0)
                {
                    CTU_P_Terminales_Opciones_Valor_CheckBox obj_CTU_P_Terminales_Opciones_Valor_CheckBox_RECORRER;
                    string str_Valores = "";
                    foreach (int int_Objecto in g_lst_CTU_P_Terminales_Opciones_Valor_CheckBox)
                    {
                        obj_CTU_P_Terminales_Opciones_Valor_CheckBox_RECORRER = (CTU_P_Terminales_Opciones_Valor_CheckBox)pnl_Valores.Controls.Find("controlusuario_CTU_P_Terminales_Opciones_Valor_CheckBox" + int_Objecto, false).FirstOrDefault();

                        if (obj_CTU_P_Terminales_Opciones_Valor_CheckBox_RECORRER != null &&
                            obj_CTU_P_Terminales_Opciones_Valor_CheckBox_RECORRER.CTU_P_Terminales_Opciones_Valor_CheckBox_Checkeado)
                        {
                            str_Valores+= obj_CTU_P_Terminales_Opciones_Valor_CheckBox_RECORRER.CTU_P_Terminales_Opciones_Valor_CheckBox_OpcionValor + ",1|";
                        }
                    }

                    //Si tiene algo checkeado
                    if (str_Valores.Trim().Length>0)
                    {
                        //Instanciar
                        mdl_GEN_Terminales_Opciones = new GEN_Terminales_Opciones();

                        //id
                        mdl_GEN_Terminales_Opciones.id = g_mdl_GEN_Terminales_Opciones != null ? g_mdl_GEN_Terminales_Opciones.id : -1;

                        //idTerminal
                        mdl_GEN_Terminales_Opciones.idTerminal = _lng_idTerminal;

                        //opcion
                        mdl_GEN_Terminales_Opciones.opcion = g_mdl_Terminal_Opcion_Modelo.opcion.Codigo;

                        //valores
                        mdl_GEN_Terminales_Opciones.valores = str_Valores;
                    }
                }
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(CTU_P_Terminales_Opciones_CheckBox_Varios) + "/" + nameof(Obtener_A_Grabar), true);
            }

            return mdl_GEN_Terminales_Opciones;
        }
        #endregion
    }
}
