using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Data;
using System.Text;
using System.Windows.Forms;

namespace GMLC01HerramientasCad.Logica
{
    
    public partial class GMLForm : BaseForm
    {
        private IGML iCommIF;
        private Boolean iImportar;
        private GML iGML = new GML();

        /// <summary>
        /// Constructor del formulario
        /// </summary>
        /// <param name="importar">Indica si se construye para importar o exportar</param>
        /// <param name="commIF">Interfaz implementada con las funciones a llamar desde el formulario</param>
        public GMLForm(Boolean importar, IGML commIF)
        {
            try
            {
                Inicializa(importar, commIF);
            }
            catch (Exception e)
            {
                Log.RegisterError(e);
                throw new ExcepcionGMLC(e.Message, e);
            }
        }

        private void Inicializa(Boolean importar, IGML commIF)
        {
            iCommIF = commIF;
            iImportar = importar;

            InitializeComponent();

            comboGMLConfigs.DataSource = ModComun.ConfigGml.Configurations;
            //ConfigGml conf = ModComun.ConfigGml.Configurations[1] as ConfigGml;
            comboGMLConfigs.DisplayMember = "Title";

            if (!iImportar)
            {
                //MessageBox.Show("Crear controles dinamicamente");
                this.Text = Properties.Resources.ExportarAGML;
                try
                {
                    iGML.Elementos = iCommIF.ObtenerElementos();

                    int num = 0;
                    foreach (Atributo att in iGML.Metadatos)
                    {
                        //Crear controles y rellenar los metadatos
                        CreaCampo(att.Codigo, att.Nombre, "", false, num);
                        num++;
                    }
                }
                catch (ExcepcionGMLC)
                {
                    MessageBox.Show(Properties.Resources.ErrorExtrayendoElementosDelFichero, "GMLC", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, 0);
                    aceptarButton.Enabled = false;
                }
            }
            else
            {
                this.Text = Properties.Resources.ImportarDeGML;
                //expedienteTextBox.readOnly = true;
                //fechaTextBox.readOnly = true;
                //proveedorTextBox.readOnly = true;
                //tituloTextBox.readOnly = true;
                //descripcionTextBox.readOnly = true;
                //comboGMLConfigs.Enabled = false;

                openFileDialog.AddExtension = true;
                openFileDialog.CheckFileExists = true;
                openFileDialog.CheckPathExists = true;
                openFileDialog.DefaultExt = ".gml";
                openFileDialog.Filter = Properties.Resources.FicherosGMLTodosLosFicheros;
                openFileDialog.InitialDirectory = ModComun.DirectorioGMLDefault;
                openFileDialog.Multiselect = false;
                openFileDialog.ValidateNames = true;
                openFileDialog.ShowDialog();

                if (String.IsNullOrEmpty(openFileDialog.FileName))
                {
                    this.aceptarButton.Enabled = false;
                    return;
                }

                iGML.Leer(openFileDialog.FileName);

                int num = 0;
                foreach (Atributo att in iGML.Metadatos)
                {
                    //Crear controles y rellenar los metadatos
                    CreaCampo(att.Codigo, att.Nombre, att.Valor, true, num);
                    num++;
                }

                //////////////////////////////////////expedienteTextBox.Text = iGML.Metadatos.Expediente;
                //////////////////////////////////////fechaTextBox.Text = iGML.Metadatos.Fecha;
                //////////////////////////////////////proveedorTextBox.Text = iGML.Metadatos.Proveedor;
                //////////////////////////////////////tituloTextBox.Text = iGML.Metadatos.Titulo;
                //////////////////////////////////////descripcionTextBox.Text = iGML.Metadatos.Descripcion;
            }
        }

        private void CreaCampo(string code, string label, string value, bool readOnly, int num)
        {
            TableLayoutPanel panel = this.tbMetadata;
            // label
            Label mylabel = new Label();
            mylabel.Name = code + "_label";
            mylabel.Text = label + " : ";
            mylabel.Dock = DockStyle.Fill;
            mylabel.AutoSize = false;
            mylabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
            panel.Controls.Add(mylabel, 0, num);

            // TextBox
            TextBox textBox = new TextBox();
            //textBox.Dock = DockStyle.Fill;
            textBox.Name = code + "_Control";
            textBox.TextAlign = HorizontalAlignment.Left;
            textBox.Tag = label; //num;
            textBox.Text = value;
            textBox.ReadOnly = readOnly;
            textBox.Width = 213;
            panel.Controls.Add(textBox, 1, num);
        }

        private void AceptarButtonClick(object sender, EventArgs e)
        {
            if (iImportar)
                iCommIF.GrabarElementos(iGML.Elementos);
            else
            {
                /*
                if (!String.IsNullOrEmpty(expedienteTextBox.Text))
                    iGML.Metadatos.iExpediente = expedienteTextBox.Text;
                else
                {
                    MessageBox.Show(Properties.Resources.ElCampoExpedienteEsObligatorio, "GMLC", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1, 0);
                    expedienteTextBox.Focus();
                    return;
                }

                if (!String.IsNullOrEmpty(fechaTextBox.Text))
                    iGML.Metadatos.iFecha = fechaTextBox.Text;
                else
                {
                    MessageBox.Show(Properties.Resources.ElCampoFechaEsObligatorio, "GMLC", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1, 0);
                    fechaTextBox.Focus();
                    return;
                }

                if (!String.IsNullOrEmpty(proveedorTextBox.Text))
                    iGML.Metadatos.iProveedor = proveedorTextBox.Text;
                else
                {
                    MessageBox.Show(Properties.Resources.ElCampoProveedorEsObligatorio, "GMLC", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1, 0);
                    proveedorTextBox.Focus();
                    return;
                }

                if (!String.IsNullOrEmpty(tituloTextBox.Text))
                    iGML.Metadatos.iTitulo = tituloTextBox.Text;
                else
                {
                    MessageBox.Show(Properties.Resources.ElCampoTituloEsObligatorio, "GMLC", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1, 0);
                    tituloTextBox.Focus();
                    return;
                }

                if (!String.IsNullOrEmpty(descripcionTextBox.Text))
                    iGML.Metadatos.iDescripcion = descripcionTextBox.Text;
                else
                {
                    MessageBox.Show(Properties.Resources.ElCampoDescripcionEsObligatorio, "GMLC", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1, 0);
                    descripcionTextBox.Focus();
                    return;
                }
                */
                ////////////////////////////////////////////////iGML.Metadatos.Expediente = expedienteTextBox.Text;
                ////////////////////////////////////////////////iGML.Metadatos.Fecha = fechaTextBox.Text;
                ////////////////////////////////////////////////iGML.Metadatos.Proveedor = proveedorTextBox.Text;
                ////////////////////////////////////////////////iGML.Metadatos.Titulo = tituloTextBox.Text;
                ////////////////////////////////////////////////iGML.Metadatos.Descripcion = descripcionTextBox.Text;

                foreach (Atributo att in iGML.Metadatos)
                {
                    //Copia los datos a los metadatos del GML.
                    iGML.Metadatos[att.Codigo].Valor = ((TextBox)tbMetadata.Controls[att.Codigo + "_Control"]).Text;
                }


                saveFileDialog.AddExtension = true;
                saveFileDialog.CheckPathExists = true;
                saveFileDialog.DefaultExt = ".gml";
                saveFileDialog.Filter = Properties.Resources.FicherosGMLTodosLosFicheros;
                saveFileDialog.InitialDirectory = ModComun.DirectorioGMLDefault;
                saveFileDialog.OverwritePrompt= true;
                saveFileDialog.Title = Properties.Resources.FicheroGMLAGenerar;
                saveFileDialog.ShowDialog();

                if (String.IsNullOrEmpty(saveFileDialog.FileName))
                    return;

                try
                {
                    iGML.Generar(saveFileDialog.FileName, (ConfigGml)comboGMLConfigs.SelectedItem);
                }
                catch (ExcepcionGMLC except)
                {
                    MessageBox.Show(except.Message, "GMLC", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1, 0);
                }
            }

            this.Close();
        }

        private void CancelarButtonClick(object sender, EventArgs e)
        {
            this.Close();
        }

        /// <summary>
        /// 
        /// </summary>
        public override void ActualizarIdiomaInterfaz()
        {
            try
            {
                base.ActualizarIdiomaInterfaz();

                //this.descripcionLabel.Text = Properties.Resources.Descripcion;
                //this.tituloLabel.Text = Properties.Resources.Titulo;
                //this.proveedorLabel.Text = Properties.Resources.Proveedor;
                //this.fechaLabel.Text = Properties.Resources.Fecha;
                //this.expedienteLabel.Text = Properties.Resources.Expediente;
                this.configuracionLabel.Text = Properties.Resources.ConfiguracionGML;
            }
            catch (Exception e)
            {
                Log.RegisterError(e);
                throw new ExcepcionGMLC(e.Message, e);
            }
        }
    }
}