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

namespace GMLC01HerramientasCad.Logica
{
    public partial class EtiquetadoForm : BaseForm
    {
        private IEtiquetado iCommIF;
        private CriterioEtiquetado iCriterios;

        /// <summary>
        /// Constructor del formulario
        /// </summary>
        /// <param name="commIF">Interfaz implementada con las funciones a llamar desde el formulario</param>
        /// <param name="elementos">Elementos seleccionados para determinar las entidades de trabajo</param>
        public EtiquetadoForm(IEtiquetado commIF)
        {
            try
            {
                iCommIF = commIF;
                InitializeComponent();
                iCriterios = new CriterioEtiquetado();
                iCriterios.Altura = 1;
                iCriterios.Color = muestraEstiloLabel.ForeColor;
                iCriterios.Estilo = muestraEstiloLabel.Font.Style;
                iCriterios.Font = muestraEstiloLabel.Font.Name;
                entidadComboBox.DisplayMember = "NombreComboDisplay";
                //entidadComboBox.ValueMember= "Codigo";
                atributoComboBox.DisplayMember = "Nombre";
                atributoComboBox.ValueMember = "Codigo";

                muestraEstiloLabel.Text = muestraEstiloLabel.Font.Name;

                sufijoTextBox.Text = ModComun.SufijoRotulacionDefault;

                foreach (Entidad ent in ModComun.XSD.Entidades)
                    entidadComboBox.Items.Add(ent);

                entidadComboBox.Sorted = true;
            }
            catch (Exception e)
            {
                Log.RegisterError(e);
                throw new ExcepcionGMLC(e.Message, e);
            }
        }

        private void AceptarButtonClick(object sender, EventArgs e)
        {
            if (entidadComboBox.SelectedIndex == -1)
            {
                MessageBox.Show(Properties.Resources.NoHayEntidadesSeleccionadasParaEtiquetar, "GMLC", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, 0);
                return;
            }

            if (MessageBox.Show(Properties.Resources.DeseaRealizarElEtiquetado, "GMLC", MessageBoxButtons.YesNo,
                               MessageBoxIcon.Question, MessageBoxDefaultButton.Button1, 0) == DialogResult.No)
                return;

            iCriterios.Entidades = new Collection<Entidad>();
            iCriterios.Entidades.Add((Entidad)(entidadComboBox.SelectedItem));

            iCriterios.Atributo = ((Atributo)(atributoComboBox.SelectedItem)).Codigo;
            iCriterios.Sufijo = sufijoTextBox.Text;

            iCommIF.Etiquetar(iCriterios);
            this.Close();
        }

        private void SeleccionarFontButtonClick(object sender, EventArgs e)
        {

            //iCriterios.Altura = 1;
            //iCriterios.Color = muestraEstiloLabel.ForeColor;
            //iCriterios.Estilo = muestraEstiloLabel.Font.Style;
            //iCriterios.Font = muestraEstiloLabel.Font.Name;

            SeleccionFontForm form = new SeleccionFontForm(iCriterios);
            form.ShowDialog(this);
            iCriterios = form.Criterio;

            System.Drawing.Font font = new Font(iCriterios.Font, muestraEstiloLabel.Font.Size, iCriterios.Estilo, muestraEstiloLabel.Font.Unit);
            muestraEstiloLabel.Font = font;
            muestraEstiloLabel.ForeColor = iCriterios.Color;
            muestraEstiloLabel.Text = iCriterios.Font + " " + iCriterios.Altura;

        }

        private void EntidadComboBoxSelectedIndexChanged(object sender, EventArgs e)
        {
            ComboBox cBox = (ComboBox)sender;
            String codigoEntidad = ((Entidad)(cBox.SelectedItem)).Codigo;

            if (codigoEntidad == null || !ModComun.XSD.Entidades.Contains(codigoEntidad))
                return;

            atributoComboBox.Items.Clear();
            foreach (Atributo atr in ModComun.XSD.Entidades[codigoEntidad].Atributos)
                if (atr.Codigo != ModComun.XSD.Clave)
                    atributoComboBox.Items.Add(atr);

            atributoComboBox.SelectedIndex = 0;
        }

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

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

                this.estiloLabel.Text = Properties.Resources.Estilo;
                this.toolTip1.SetToolTip(this.seleccionarFontButton, Properties.Resources.SeleccionarUnEstiloDeTexto);
                this.entidadLabel.Text = Properties.Resources.Entidad;
                this.toolTip1.SetToolTip(this.entidadComboBox, Properties.Resources.SeleccionarUnaEntidadParaIncluirEnLaLista);
                //this.toolTip1.SetToolTip(this.entidadesListBox, Properties.Resources.ListaDeEntidadesAEtiquetar);
                this.atributoLabel.Text = Properties.Resources.Atributo;
                this.toolTip1.SetToolTip(this.atributoComboBox, Properties.Resources.AtributoARotularEnLaEtiqueta);
                this.sufijoLabel.Text = Properties.Resources.SufijoDestino;
                this.toolTip1.SetToolTip(this.sufijoTextBox, Properties.Resources.SufijoAAnadirALaEntidad);
                this.toolTip1.SetToolTip(this.cancelarButton, Properties.Resources.CancelarElFormulario);
                this.toolTip1.SetToolTip(this.aceptarButton, Properties.Resources.RealizarElEtiquetado);
                this.toolTip1.SetToolTip(this.muestraEstiloLabel, Properties.Resources.MuestraDeEstiloSeleccionado);
                //this.toolTip1.SetToolTip(this.agregarButton, Properties.Resources.AnadirEntidadALista);
                //this.toolTip1.SetToolTip(this.eliminarButton, Properties.Resources.EliminarDeLaLista);
                this.Text = Properties.Resources.Etiquetado;
            }
            catch (Exception e)
            {
                Log.RegisterError(e);
                throw new ExcepcionGMLC(e.Message, e);
            }
        }
    }
}