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.General;
using Exferia_EntityFramework;
using Exferia_Aplicacion.Visualizacion;
using System.IO;
using System.Diagnostics;

namespace Exferia_Mythos._3_Vistas.ControlesPersonalizados_DentroPaneles
{
    public partial class CTU_P_Modelo_Documentos : UserControl
    {
        #region Variables Privadas
        private int g_int_NumerObjeto;
        private MYT_ModelosDocumentos g_mdl_MYT_ModelosDocumentos = null;
        #endregion

        #region Eventos Publicos
        public event EventHandler<INTERNO_EventArgs> Boton_CTU_P_Modelo_Documentos_Delete_Click;
        #endregion

        #region Constructor
        public CTU_P_Modelo_Documentos(int _int_NumerObjeto, MYT_ModelosDocumentos _mdl_MYT_ModelosDocumentos)
        {
            InitializeComponent();

            Repintar.Empezar(this);

            try
            {
                ex_btn_Ver.Visible = false;

                //Variables recibidas
                g_int_NumerObjeto = _int_NumerObjeto;
                g_mdl_MYT_ModelosDocumentos = _mdl_MYT_ModelosDocumentos;

                Cargar();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(CTU_P_Modelo_Documentos) + "/" + nameof(CTU_P_Modelo_Documentos));
            }
        }
        #endregion

        #region Cargar
        private void Cargar()
        {
            try
            {
                //Cargar los datos si los tuviera
                if (g_mdl_MYT_ModelosDocumentos != null)
                {
                    //descripcion
                    ex_txt_Descripcion.Text = g_mdl_MYT_ModelosDocumentos.descripcion;

                    //Tamaño
                    ex_lbl_Size.Text = (g_mdl_MYT_ModelosDocumentos.size>0 ? Math.Round((decimal)g_mdl_MYT_ModelosDocumentos.size / 1024).ToString() : "0") + " KB";
                    ex_lbl_Size.Tag = g_mdl_MYT_ModelosDocumentos.size;

                    //Estension
                    ex_lbl_Extension.Text = g_mdl_MYT_ModelosDocumentos.extension;

                    //Poner visible Ver del Documento
                    ex_btn_Ver.Visible = true;
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(CTU_P_Modelo_Documentos) + "/" + nameof(Cargar));
            }

        }
        #endregion

        #region Borrar
        private void ex_btn_Borrar_Click(object sender, EventArgs e)
        {
            Boton_CTU_P_Modelo_Documentos_Delete_Click?.Invoke(sender, new INTERNO_EventArgs(g_int_NumerObjeto));
        }
        #endregion

        #region Ruta
        private void ex_fch_BuscarDocumento_Exferia_FicheroSeleccion_RutaCompleta_Evento_TextChanged(object sender, EventArgs e)
        {
            if (ex_fch_BuscarDocumento.Exferia_FicheroSeleccion_RutaCompleta_NombreFichero.Trim().Length > 0)
            {
                ex_btn_Ver.Visible = true;

                FileInfo obj_Fichero = new FileInfo(ex_fch_BuscarDocumento.Exferia_FicheroSeleccion_RutaCompleta_NombreFichero.Trim());
                //Si la descripcion esta vacia se pone el mismo nombre del fichero
                if (obj_Fichero != null)
                {
                    //Descripcion
                    ex_txt_Descripcion.Text = obj_Fichero.Name.Substring(0, obj_Fichero.Name.Length - 4);

                    //Tamaño
                    ex_lbl_Size.Text = Math.Round((decimal)obj_Fichero.Length / 1024).ToString() + " KB";
                    ex_lbl_Size.Tag = obj_Fichero.Length;

                    //Estension
                    ex_lbl_Extension.Text = obj_Fichero.Extension;
                }
            }
            else if (g_mdl_MYT_ModelosDocumentos == null)
            {
                ex_btn_Ver.Visible = false;

                //Descripcion
                ex_txt_Descripcion.Text = "";

                //Tamaño
                ex_lbl_Size.Text =  "0 Kb";
                ex_lbl_Size.Tag = "0";

                //Estension
                ex_lbl_Extension.Text = "";
            }
        }
        #endregion

        #region Ver
        private void ex_btn_Ver_Click(object sender, EventArgs e)
        {
            try
            {
                if (ex_fch_BuscarDocumento.Exferia_FicheroSeleccion_RutaCompleta_NombreFichero.Trim().Length > 0)
                {
                    Process obj_AbrirAdjunto = new Process();
                    obj_AbrirAdjunto.StartInfo.FileName = ex_fch_BuscarDocumento.Exferia_FicheroSeleccion_RutaCompleta_NombreFichero.Trim();
                    obj_AbrirAdjunto.Start();
                }
                else if (g_mdl_MYT_ModelosDocumentos != null)
                {
                    string str_Ruta = Path.GetTempPath() + "tmp_01_" + g_mdl_MYT_ModelosDocumentos.extension;

                    System.IO.File.WriteAllBytes(str_Ruta, g_mdl_MYT_ModelosDocumentos.fichero);

                    Process obj_AbrirAdjunto = new Process();
                    obj_AbrirAdjunto.StartInfo.FileName = str_Ruta;
                    obj_AbrirAdjunto.Start();
                }

            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(CTU_P_Modelo_Documentos) + "/" + nameof(ex_btn_Ver_Click));
            }
        }
        #endregion

        #region Validacion
        public INTERNO_ValorDevuelto_Modelo ValidarDatos()
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                //La Descricion no puede estar vacia
                if ((mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto) && (ex_txt_Descripcion.Text.Trim().Length == 0))
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(ex_lbl_Descripcion.Text);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = ex_txt_Descripcion;
                }

                //El documento no puede estar vacio
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto &&
                    g_mdl_MYT_ModelosDocumentos==null && 
                    ex_fch_BuscarDocumento.Exferia_FicheroSeleccion_RutaCompleta_NombreFichero.Trim().Length == 0)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(ex_fch_BuscarDocumento.Exferia_FicheroSeleccion_RutaCompleta_Descripcion);
                }

            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_VALIDARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(CTU_P_Modelo_Documentos) + "/" + nameof(ValidarDatos));

                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_VALIDARDATOSPANTALLA();
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }
        #endregion

        #region Grabar
        public MYT_ModelosDocumentos Obtener_Para_Grabar(long _lng_idModelo)
        {
            MYT_ModelosDocumentos mdl_MYT_ModelosDocumentos = new MYT_ModelosDocumentos();

            try
            {
                //id
                mdl_MYT_ModelosDocumentos.id = g_mdl_MYT_ModelosDocumentos != null ? g_mdl_MYT_ModelosDocumentos.id : -1;

                //idModelo
                mdl_MYT_ModelosDocumentos.idModelo = _lng_idModelo;

                //descripcion
                mdl_MYT_ModelosDocumentos.descripcion = ex_txt_Descripcion.Text;

                //fichero
                if (ex_fch_BuscarDocumento.Exferia_FicheroSeleccion_RutaCompleta_NombreFichero.Trim().Length > 0)
                {
                    mdl_MYT_ModelosDocumentos.fichero = File.ReadAllBytes(ex_fch_BuscarDocumento.Exferia_FicheroSeleccion_RutaCompleta_NombreFichero.Trim());
                }
                else
                {
                    mdl_MYT_ModelosDocumentos.fichero = g_mdl_MYT_ModelosDocumentos.fichero;
                }

                //extension
                mdl_MYT_ModelosDocumentos.extension = ex_lbl_Extension.Text;

                //size
                mdl_MYT_ModelosDocumentos.size = long.Parse(ex_lbl_Size.Tag.ToString());

                //fechaBorrado
                mdl_MYT_ModelosDocumentos.fechaBorrado = null;
                
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(CTU_P_Modelo_Documentos) + "/" + nameof(Obtener_Para_Grabar));
            }

            return mdl_MYT_ModelosDocumentos;
        }
        public long Obtener_Ids_Grabados()
        {
            long lng_id = -1;

            try
            {
                if (g_mdl_MYT_ModelosDocumentos != null)
                {
                    lng_id = g_mdl_MYT_ModelosDocumentos.id;
                }
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(CTU_P_Modelo_Documentos) + "/" + nameof(Obtener_Ids_Grabados));
            }

            return lng_id;
        }
        #endregion

    }
}
