// 
// 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 minigestor.datos
{
    public class TablaColas : IEnumerable<RegistroCola>
    {
        List<RegistroCola> datos = new List<RegistroCola>();
        private static TablaColas _yo = null;
        private bool _completa = false;

        public bool completa {

            get {
                return _completa;
            }
            set {
                _completa = value;
            }
        }

        public static TablaColas getTablaColas() {
            if (_yo == null) {
                _yo = new TablaColas();
            }
            return _yo;
        }

        public void vaciar() {
            datos.Clear();
        }

        public int recordsCount() {
            return datos.Count;
        }

        public RegistroCola nuevoRegistro(string reg) {
            try {
                RegistroCola r = new RegistroCola();
                r.leerRegistroCompleto(reg);
                int pos = posCola(r.cola);
                if (pos > -1) {
                    datos[pos] = r;
                } else {
                    datos.Add(r);
                }
                return r;
            } catch { }
            return null;
        }

        public void modificaRegistro(string reg) {
            try {
                RegistroCola r = new RegistroCola();
                r.leerRegistroCompleto(reg);
                for (int i = 0; i < datos.Count; i++) {
                    RegistroCola rb = datos[i];
                    if (rb.id == r.id) {
                        datos[i] = r;
                        break;
                    }
                }
            } catch { }
        }

        public RegistroCola buscar(string cola) {
            foreach (RegistroCola rb in datos) {
                if (rb.cola.Equals(cola, StringComparison.CurrentCultureIgnoreCase)) {
                    return rb;
                }
            }
            return null;
        }

        private int posCola(string cola) {
            for (int i = 0; i < datos.Count; i++) {
                RegistroCola rb = datos[i];
                if (rb.cola.Equals(cola, StringComparison.CurrentCultureIgnoreCase)) {
                    return i;
                }
            }
            return -1;
        }
   
        public IEnumerator<RegistroCola>  GetEnumerator()   {
            return datos.GetEnumerator();
        }

        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() {
            return datos.GetEnumerator();
        }

    }
}
