// 
// Copyright 2016 Agencia Estatal de Administración Tibutaria
//
// Licencia con arreglo a la EUPL, Versión 1.1 o -en cuanto
// sean aprobadas por la Comisión Europea- versiones
// posteriores de la EUPL (la «Licencia»);
// Solo podrá usarse esta obra si se respeta la Licencia.
// Puede obtenerse una copia de la Licencia en:
//  
// https://joinup.ec.europa.eu/software/page/eupl
//  
// Salvo cuando lo exija la legislación aplicable o se acuerde
// por escrito, el programa distribuido con arreglo a la
// Licencia se distribuye «TAL CUAL», SIN GARANTÍAS NI CONDICIONES
// DE NINGÚN TIPO, ni expresasni implícitas.
//
// Véase la Licencia en el idioma concreto que rige los permisos y 
// limitaciones que establece la Licencia.
// 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Windows.Forms.VisualStyles;

namespace operador
{
    public partial class FormReenvio : Form
    {
        public string colaSeleccionada;
        int anteriorItemSeleccionado = 0;
        public string mesa = "";

        public FormReenvio(ColeccionColas colas, string ticket, string colaActual, string segundaCola, string colasValidas) {
            InitializeComponent();
            ColaReenvio[] arrColas = colas.toArray(colaActual);
            if (colasValidas != null && colasValidas != "SIN INFORMACION" && colasValidas != "") {
                cboxColas.DrawMode = DrawMode.OwnerDrawFixed;
                arreglarListaDecolas(arrColas, colasValidas);
            } else {
                cboxColas.DrawMode = DrawMode.Normal;
            }
            cboxColas.Items.AddRange(arrColas);
            cboxColas.SelectedIndex = 0;
            if (segundaCola != null) {
                lbDatos.Text = "Tique a reenviar: " + ticket + "   ** Tiene otra cita concertada en la cola: " + segundaCola + " **";
                for (int i = 0; i < arrColas.Length; i++) {
                    if (arrColas[i].cola == segundaCola) {
                        cboxColas.SelectedIndex = i;
                    }
                }
                this.Focus();

            } else {
                lbDatos.Text = "Tique a reenviar: " + ticket;
            }
        }

        private void arreglarListaDecolas(ColaReenvio[] arrColas, string colasValidas) {
            string[] validas = colasValidas.Split(',');
            for (int i = 1; i < arrColas.Length; i++) {
                ColaReenvio cr = arrColas[i];
                if (Array.IndexOf(validas, cr.cola) == -1) {
                    cr.activo = false;
                }
            }
        }

        private void btOk_Click(object sender, EventArgs e) {
            if (cboxColas.SelectedIndex == 0) {
                mesa = "";
                MessageBox.Show("Va a cancelar el reenvio para esta cita");
            }
            colaSeleccionada = ((ColaReenvio)cboxColas.SelectedItem).cola;
            DialogResult = DialogResult.OK;
        }

        private void btCancelar_Click(object sender, EventArgs e) {
            DialogResult = DialogResult.Cancel;
        }

        private void cboxColas_DrawItem(object sender, DrawItemEventArgs e) {
            e.DrawBackground();
            e.DrawFocusRectangle();
            ColaReenvio cr = cboxColas.Items[e.Index] as ColaReenvio;
            if (cr != null) {
                if (cr.activo) {
                    e.Graphics.DrawString(cr.ToString(), cboxColas.Font, Brushes.Black,
                        new Point(e.Bounds.X, e.Bounds.Y));
                } else {
                    e.Graphics.DrawString(cr.ToString(), cboxColas.Font, Brushes.LightGray,
                        new Point(e.Bounds.X, e.Bounds.Y));
                }
            }
            if (!ComboBoxRenderer.IsSupported) {
                return;
            }
        }

        private void cboxColas_SelectedIndexChanged(object sender, EventArgs e) {
            ColaReenvio cr = cboxColas.SelectedItem as ColaReenvio;
            mesa = "";
            lbMesa.Text = "";
            if (cr != null) {
                if (cr.activo) {
                    anteriorItemSeleccionado = cboxColas.SelectedIndex;
                    btOperador.Enabled = cr.cola != "";
                } else {
                    cboxColas.SelectedIndex = anteriorItemSeleccionado;
                }
            }
        }

        private void FormReenvio_Shown(object sender, EventArgs e) {
            cboxColas.DroppedDown = true;
        }

        private void btOperador_Click(object sender, EventArgs e) {
            if (cboxColas.SelectedIndex == 0) {
                MessageBox.Show("No se ha selecionado cola");
                return;
            }
            colaSeleccionada = ((ColaReenvio)cboxColas.SelectedItem).cola;
            Principal.yo.comm.solicitarOperadores(colaSeleccionada);
        }

        public void mostrarOperadores(string listaOPe) {
            mesa = "";
            DlgOperadores dlop = new DlgOperadores();
            dlop.cargar(listaOPe);
            dlop.ShowDialog(this);
            mesa = dlop.mesa;
            if (mesa != "") {
                lbMesa.Text = "Envío a Mesa " + mesa;
            } else {
                lbMesa.Text = "";
            }
        }
    }

    public class ColaReenvio : IComparable<ColaReenvio>
    {
        public ColaReenvio(string c, string d) {
            cola = c;
            descripcion = d;
        }
        public ColaReenvio() { }

        public string cola = "";
        public string descripcion = "";
        public bool activo = true;
        public override string ToString() {
            if (cola == "") return "";
            return cola + " - " + descripcion;
        }

        public int CompareTo(ColaReenvio otra) {
            string c1 = cola.Length == 1 ? " " + cola : cola;
            string c2 = otra.cola.Length == 1 ? " " + otra.cola : otra.cola;
            return c1.CompareTo(c2);
        }
    }
}