// 
// 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.Text;

namespace operador
{
    class Configuracion : ateneo.ConfiguracionBase
    {
        private const string nombreFichero = "ConfiguracionOperador.ini";
        private static Configuracion _yo = null;

        public string numeroMesa;
        public string nombreOficina;
        public string operador = null;
        public int tiempoEspera = 60;
        public int tiempoNoOperativo = 120;
        public string ipServidor;
        public int puerto;
        public string ipServidorSec;
        public int puertoSec;
        public bool navegarIntranet = false;
        public bool bloquearCliente = true;
        public string scriptInicio = null;
        public string scriptFinal = null;
        public bool recordarFinalizar = false;
        //****************
        public bool modoPrueba;
        public string passwordIntranet;
        //****************
        public string nombreServidor;
        public bool usandoUDP = false;  
        public string nombreOperador = null;
        public bool logNavegacion = false;
        public List<string> colasVisibles = new List<string>();
        public List<string> colasInvisibles = new List<string>();
        public float minutosCitaLarga = 75;
        public bool pedirUsuario = true;
        public bool permitirNoiden = true;
        public static Configuracion instanciaUnica() {
            if (_yo == null) {
                _yo = new Configuracion();
            }
            return _yo;
        }

        protected Configuracion() : base() {
        }

        public bool cargar() {
            base.cargar(nombreFichero);
            comprobarNumeroMesa();
            tiempoEspera = valor("tiempoEspera", 60);
            tiempoNoOperativo = valor("tiempoNoOperativo", 120);
          //  navegarIntranet = valor("navegarIntranet", true);
            ipServidor = valor("IpServidor", "");
            puerto = valor("IpPort", 5000);
            nombreServidor = valor("nombreServidor", "");
            if (nombreServidor != "") usandoUDP = true;
            ipServidorSec = valor("IpServidorSec", "");
            if (ipServidorSec == "") {
                ipServidorSec = ipServidor;
            }
            puertoSec = valor("IpPortSec", 0);
            if (puertoSec == 0) {
                puertoSec = puerto;
            }
            bloquearCliente = !valor("PermitirEjecucionSimultanea", !bloquearCliente);
            scriptInicio = valor("ScriptInicioCita", null);
            scriptFinal = valor("ScriptFinalCita", null);
            recordarFinalizar = valor("RecordarFinalizar", recordarFinalizar);
            logNavegacion = valor("LogNavegacion", logNavegacion);
            string colasReenvioVisibles = valor("ColasReenvioVisibles", "").ToUpper();
            string colasReenvioInvisibles = valor("ColasReenvioInvisibles", "").ToUpper();
            cargarListacolasVisibles(colasReenvioVisibles, colasReenvioInvisibles);
            minutosCitaLarga = valor("MinutosCitaLarga", minutosCitaLarga);
            if (minutosCitaLarga < 1) minutosCitaLarga = 1;
            pedirUsuario = valor("pedirUsuario", true);
           
            return true;
        }

        private void cargarListacolasVisibles(string visibles, string invisibles) {
            if (invisibles == "") {
                if (visibles != "") {
                    string[] pp = visibles.Split(',');
                    colasVisibles.AddRange(pp);
                }
            } else {
                string[] pp = invisibles.Split(',');
                colasInvisibles.AddRange(pp);
            }
        }

        string mesaOK(string mesa) {
            int v;
            if (Int32.TryParse(mesa, out v)) {
                return mesa;
            }
            return "";
        }

        void comprobarNumeroMesa() {
            numeroMesa = mesaOK(valor("numeroMesa", "0").Trim());
            while (numeroMesa == "0"  || numeroMesa == "") {
                string s = Microsoft.VisualBasic.Interaction.InputBox("Introducir número de puesto", "NUEVA MESA", "0", -1, -1);
                if (s != null) {
                    if (mesaOK(s).Length > 0) {
                        s = trimCeros(s);
                        ponValor("numeroMesa", s);
                        guardar();
                        numeroMesa = s;
                        break;
                    }
                } else {           // pulsado cancelar
                    System.Windows.Forms.MessageBox.Show("Es necesario introducir el número de mesa\n" +
                            "Ejecute de nuevo este programa para corregir el error");
                    
                }
            }
            if (numeroMesa.StartsWith("0")) {
                numeroMesa = trimCeros(numeroMesa);
                ponValor("numeroMesa", numeroMesa);
                guardar();
            }
        }

        string trimCeros(string s) {
            string s3 = System.Text.RegularExpressions.Regex.Replace(s.Trim(),"^0*","");
            return s3;
        }

        public string nombreDeCola(string cola, string descripcion) {
            ateneo.Dato dato = buscar(cola);
            if (dato == null) {
                return descripcion;
            }
            return dato.valor;
        }
    }
}
