// 
// 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;
using ateneo.utiles;

namespace operador
{
    public abstract class ProcesoCliente
    {
        private const int PROCESO_RENTA = 1;
        private const int PROCESO_NOTIFICACIONES = 2;
        public string nif;
        public string apellido;
        public string nifConyuge;
        public string apeConyuge;
        public string ticket;
        public string gestor = "_";
        public int citas;
        public int tiempoMedioCita = 20;
        public string Id = " ";
        protected Principal central;
        public ColeccionColas.Registro colaActual;
        public string msgOriginal;
        public DateTime horaInicio;
        public ProcesoCliente(Principal central) {
            this.central = central;
        }

        public static ProcesoCliente crearCliente(Principal central, string msg) {
            try {
                string[] pars = msg.Split('|');
                string cola = pars[3];
                ColeccionColas.Registro colaActual = ColeccionColas.unica().get(cola);
                ProcesoCliente cliente = null;
                cliente = new ProcesoClienteSimple(central);
                cliente.nif = pars[0];
                cliente.apellido = pars[1];
                cliente.citas = Int32.Parse(pars[2]);
                cliente.ticket = pars[4];
                cliente.Id = pars[5];
                if (cliente.citas == 0) {
                    cliente.citas = 1;
                }
                cliente.colaActual = colaActual;
                int tmedio1 = colaActual.tiempoMedio;

                if (tmedio1 < 600) tmedio1 = 600;
               
                int tcoef = central.minutosCitaLarga;
                int tmedio2 = ((tmedio1 * tcoef) / 100)+tmedio1;
                if (tmedio2 > 3600) tmedio2 = 3600;
                //  if (tmedio2 > 140) tmedio2 = 140;
                cliente.tiempoMedioCita = tmedio2 * 1000;
                //cliente.indicadores = pars[6];
                //if (pars.Length > 7) {
                //    cliente.nifConyuge = pars[7].Trim();
                //    cliente.apeConyuge = pars[8].Trim();
                //    cliente.gestor = pars[9].Trim();
                //}
               
                cliente.gestor = pars[6].Trim();
                cliente.msgOriginal = msg;
                return cliente;
            } catch (Exception exc) {
                LogExcepcion.guardar("Error en creacion de cliente", exc);
            }
            return null;
        }

        public bool hayConyuge() {
         //   return nifConyuge != null && nifConyuge.Length > 0;
            return false;
        }

        public override string ToString() {
            string texto = nif + " - " + apellido;
            //if (hayConyuge()) {
            //    texto += "#Conyuge: " + nifConyuge + " " + apeConyuge + "#citas: " + citas + " Cola: " + colaActual.descripcion + "  Tique: " + ticket;
            //} else {
            texto += "#" + "citas: " + citas + "#Cola: " + colaActual.descripcion + "  Tique: " + ticket;
            //}
            return texto;
        }

        public abstract void procesoInicial();

        public void procesoFinalizacion(bool visitaCancelada) {
            procesoFinalizacionEspecial();
            if (!visitaCancelada) {
                central.procesoFinalizacionCliente();
                if (colaActual.codigoEstadistico == "0") {
                    FormOperacionRealizada fop = new FormOperacionRealizada();
                    fop.ShowDialog();
                    string nuevoCodigo = fop.seleccionado.codigo;
                    central.enviarModificacionCategoriaCandidato(Id, nuevoCodigo);
                    fop.Dispose();
                    fop = null;
                }
            }
        }

        public abstract void procesoFinalizacionEspecial();

        public abstract string getMensajeFinalizacion();

        //public abstract void navegar();

        //public virtual void navegarConyuge() { }

    }
}
