using Exferia_Aplicacion.General;
using Exferia_Aplicacion.Visualizacion;
using Exferia_Controles;
using Exferia_EntityFramework;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Linq;
using Exferia_GestionDocumental.General;
using Exferia_GestionDocumental._0_Modelos;

namespace Exferia_GestionDocumental._3_Vistas
{
    public partial class PE_CamposRelacionales : Exferia_Formularios.P_Base
    {
        #region Variables privadas
        private long g_lng_Id = -1;
        private string g_str_Tabla = "";
        private string g_str_Campo = "";
        private string g_str_TipoCampo = "";
        private long g_lng_ConexionDBExterna_Id = -1;
        private string g_str_ConexionDBExterna_Descripcion = "";
        private List<GTD_DocumentosTipos_Etiquetas> g_lst_GTD_DocumentosTipos_Etiquetas = null;
        private int g_int_Orden=1;

        private int g_int_Etiqueta_PosicionY = 5;
        private int g_int_NumeroLineas_Etiqueta = 0;
        private List<int> g_Array_DocumentosEtiquetas = new List<int>();
        #endregion

        #region Variables publicas
        public INTERNO_GTD_DocumentosTipos_CamposRelacionales_Listado_Modelo g_mdl_INTERNO_GTD_DocumentosTipos_CamposRelacionales_Listado_Modelo = null;
        #endregion


        #region Constructor
        public PE_CamposRelacionales(long _lng_Id,string _str_Tabla,string _str_Campo,string _str_TipoCampo,long _lng_ConexionDBExterna_Id, string _str_ConexionDBExterna_Descripcion, List<GTD_DocumentosTipos_Etiquetas> _lst_GTD_DocumentosTipos_Etiquetas,int _int_Orden)
        {
            InitializeComponent();

            try
            {
                Repintar.Empezar(this);

                g_lng_Id = _lng_Id;
                g_lng_ConexionDBExterna_Id = _lng_ConexionDBExterna_Id;
                g_str_ConexionDBExterna_Descripcion = _str_ConexionDBExterna_Descripcion;
                g_str_Tabla = _str_Tabla;
                g_str_Campo = _str_Campo;
                g_str_TipoCampo = _str_TipoCampo;
                g_lst_GTD_DocumentosTipos_Etiquetas = _lst_GTD_DocumentosTipos_Etiquetas;
                g_int_Orden = _int_Orden;
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("",ex, nameof(PE_CamposRelacionales) + "/" + nameof(PE_CamposRelacionales));
            }
        }
        #endregion

        #region Inicio de Pantalla
        private void PE_CamposRelacionales_Shown(object sender, EventArgs e)
        {
            try
            {
                //Datos del Campo y la Clave
                ex_lbl_PE_CamposRelacionales_CampoTabla.Text = "Campo '" + g_str_Campo + "' de la Tabla '" + g_str_Tabla + "'";

                //Cargar Etiquetas
                if (g_lst_GTD_DocumentosTipos_Etiquetas!=null && g_lst_GTD_DocumentosTipos_Etiquetas.Count>0)
                {
                    foreach (GTD_DocumentosTipos_Etiquetas mdl_GTD_DocumentosTipos_Etiquetas in g_lst_GTD_DocumentosTipos_Etiquetas)
                    {
                        Crear_Etiqueta(mdl_GTD_DocumentosTipos_Etiquetas);
                    }
                }
            }
            catch (Control_Errores)
            {
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA());
                Salir_P_Base();
            }
            catch (Exception ex)
            {
                //No se muestra mensaje pero se guarda en el log
                Control_Errores.Errores_Log("", ex, nameof(PE_CamposRelacionales) + "/" + nameof(PE_CamposRelacionales_Shown));

                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA());
                Salir_P_Base();
            }
        }
        #endregion

        private void Crear_Etiqueta(GTD_DocumentosTipos_Etiquetas _mdl_GTD_DocumentosTipos_Etiquetas)
        {
            try
            {
                g_int_NumeroLineas_Etiqueta += 1;

                //Calcular tamaño del panel ##########################
                int int_AnchopanelPrincipal = (422 * pnl_PE_CamposRelacionales_Etiquetas.Width) / 426;
                if (pnl_PE_CamposRelacionales_Etiquetas.Controls != null && pnl_PE_CamposRelacionales_Etiquetas.Controls.Count > 0 && g_Array_DocumentosEtiquetas.Count > 0)
                {
                    int_AnchopanelPrincipal = pnl_PE_CamposRelacionales_Etiquetas.Controls.Find("ex_rbt_Etiqueta" + g_Array_DocumentosEtiquetas[0], false).FirstOrDefault().Width;
                }

                //Objeto Personalizado .....................................................................
                int int_posicionRelativa = g_int_Etiqueta_PosicionY + (pnl_PE_CamposRelacionales_Etiquetas.DisplayRectangle.Y + 5);
                Exferia_RadioButton ex_rbt_Etiqueta = new Exferia_RadioButton();
                ex_rbt_Etiqueta.Text = "(" + _mdl_GTD_DocumentosTipos_Etiquetas.codigo + ") " + _mdl_GTD_DocumentosTipos_Etiquetas.descripcion;
                ex_rbt_Etiqueta.Name = "ex_rbt_Etiqueta" + g_int_NumeroLineas_Etiqueta;
                ex_rbt_Etiqueta.Size = new Size(int_AnchopanelPrincipal, 17);
                ex_rbt_Etiqueta.Tag = _mdl_GTD_DocumentosTipos_Etiquetas;
                ex_rbt_Etiqueta.Location = new Point(5, int_posicionRelativa);
                ex_rbt_Etiqueta.Anchor = (AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Left);
                //...........................................................................................

                //Añadir al panel Principal
                g_int_Etiqueta_PosicionY += 28 + 5;
                pnl_PE_CamposRelacionales_Etiquetas.Controls.Add(ex_rbt_Etiqueta);

                g_Array_DocumentosEtiquetas.Add(g_int_NumeroLineas_Etiqueta);

            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(PE_CamposRelacionales) + "/" + nameof(Crear_Etiqueta));
            }
        }

        #region Grabar o Devolver datos
        private void ex_btn_PE_CamposRelacionales_Grabar_Click(object sender, EventArgs e)
        {
            try
            {
                //Tiene que tener una etiqueta Seleccionada
                GTD_DocumentosTipos_Etiquetas mdl_GTD_DocumentosTipos_Etiquetas = null;
                Exferia_RadioButton ex_rbt_Etiqueta = null;
                foreach (int int_ValorLinea in g_Array_DocumentosEtiquetas)
                {
                    ex_rbt_Etiqueta = (Exferia_RadioButton)pnl_PE_CamposRelacionales_Etiquetas.Controls.Find("ex_rbt_Etiqueta" + int_ValorLinea, true).FirstOrDefault();

                    if (ex_rbt_Etiqueta != null && ex_rbt_Etiqueta.Checked)
                    {
                        mdl_GTD_DocumentosTipos_Etiquetas = (GTD_DocumentosTipos_Etiquetas)ex_rbt_Etiqueta.Tag;

                        break;
                    }
                }

                if (mdl_GTD_DocumentosTipos_Etiquetas == null)
                {
                    Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_VALIDACION_NADASELECCIONADO("etiqueta"));
                }
                else
                {
                    long? lng_nulo = null;

                    g_mdl_INTERNO_GTD_DocumentosTipos_CamposRelacionales_Listado_Modelo = new INTERNO_GTD_DocumentosTipos_CamposRelacionales_Listado_Modelo();

                    //id
                    g_mdl_INTERNO_GTD_DocumentosTipos_CamposRelacionales_Listado_Modelo.id = g_lng_Id;

                    //idDocumentoTipo
                    g_mdl_INTERNO_GTD_DocumentosTipos_CamposRelacionales_Listado_Modelo.idDocumentoTipo = -1;

                    //tipo
                    if (ex_rdb_PE_CamposRelacionales_ClavePrimaria.Checked)
                    {
                        g_mdl_INTERNO_GTD_DocumentosTipos_CamposRelacionales_Listado_Modelo.tipo = int.Parse(Variables_GestionDocumental.G_MDL_TIPOCAMPOBASEDATOSPARACONSULTA_CLAVEPRIMARIA.Codigo);
                    }
                    else
                    {
                        g_mdl_INTERNO_GTD_DocumentosTipos_CamposRelacionales_Listado_Modelo.tipo = int.Parse(Variables_GestionDocumental.G_MDL_TIPOCAMPOBASEDATOSPARACONSULTA_CONSULTA.Codigo);
                    }

                    //idDocumentoTipo_Etiqueta
                    g_mdl_INTERNO_GTD_DocumentosTipos_CamposRelacionales_Listado_Modelo.idDocumentoTipo_Etiqueta = mdl_GTD_DocumentosTipos_Etiquetas.id;
                    g_mdl_INTERNO_GTD_DocumentosTipos_CamposRelacionales_Listado_Modelo.DocumentoTipoEtiqueta_Codigo = mdl_GTD_DocumentosTipos_Etiquetas.codigo;
                    g_mdl_INTERNO_GTD_DocumentosTipos_CamposRelacionales_Listado_Modelo.DocumentoTipoEtiqueta_Descripcion = mdl_GTD_DocumentosTipos_Etiquetas.descripcion;

                    //idConexionBDExterna
                    g_mdl_INTERNO_GTD_DocumentosTipos_CamposRelacionales_Listado_Modelo.idConexionBDExterna= g_lng_ConexionDBExterna_Id>-1 ? g_lng_ConexionDBExterna_Id : lng_nulo;
                    g_mdl_INTERNO_GTD_DocumentosTipos_CamposRelacionales_Listado_Modelo.ConexionBDExterna_Descripcion = g_lng_ConexionDBExterna_Id > -1 ? g_str_ConexionDBExterna_Descripcion : "";

                    //tabla
                    g_mdl_INTERNO_GTD_DocumentosTipos_CamposRelacionales_Listado_Modelo.tabla = g_str_Tabla;

                    //campo
                    g_mdl_INTERNO_GTD_DocumentosTipos_CamposRelacionales_Listado_Modelo.campo = g_str_Campo;

                    //orden
                    g_mdl_INTERNO_GTD_DocumentosTipos_CamposRelacionales_Listado_Modelo.orden = g_int_Orden;

                    //tipoCampo
                    g_mdl_INTERNO_GTD_DocumentosTipos_CamposRelacionales_Listado_Modelo.tipoCampo = g_str_TipoCampo;

                    //fechaBorrado
                    g_mdl_INTERNO_GTD_DocumentosTipos_CamposRelacionales_Listado_Modelo.fechaBorrado = null;


                    //Cerrar
                    this.Close();
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(PE_CamposRelacionales) + "/" + nameof(ex_btn_PE_CamposRelacionales_Grabar_Click));
            }
        }
        #endregion
    }
}
