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

        public bool completa {
            get {
                return _completa;
            }
            set {
                _completa = value;
            }
        }

        public static TablaCategoriasEstadisticas getTablaCategoriasEstadisticas() {
            if (_yo == null) {
                _yo = new TablaCategoriasEstadisticas();
            }
            return _yo;
        }

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

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

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

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

        public void marcarFavorito(string codigo, bool valor) {
            for (int i = 0; i < datos.Count; i++) {
                RegistroCatEstadistica rb = datos[i];
                if (rb.codigo.Equals(codigo)) {
                    rb.favorita = valor;
                    break;
                }
            }
        }

        public RegistroCatEstadistica buscar(string codigo) {
            foreach (RegistroCatEstadistica rb in datos) {
                if (rb.codigo.Equals(codigo)) {
                    return rb;
                }
            }
            return null;
        }

        private int posRegistro(string codigo) {
            for (int i = 0; i < datos.Count; i++) {
                RegistroCatEstadistica rb = datos[i];
                if (rb.codigo.Equals(codigo)) {
                    return i;
                }
            }
            return -1;
        }
        public string dameCodigo(string valor)
        {
            for (int i = 0; i < datos.Count; i++)
            {
                RegistroCatEstadistica rb = datos[i];
                if (rb.categoria.Equals(valor))
                {
                    return rb.codigo.ToString().Trim();
                }
            }
            return "-1";
        }
        public IEnumerator<RegistroCatEstadistica> GetEnumerator() {
            return datos.GetEnumerator();
        }

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

        internal void cargaFavoritas(string listaFavoritasCatEstadisticas) {
            foreach (RegistroCatEstadistica rb in datos) {
                string[] listaFavoBeta = listaFavoritasCatEstadisticas.Split(',');
                if (buscarenArrayListaFavoCatEsta(rb.codigo, listaFavoBeta))
                {
                    rb.favorita = true;
                } else {
                    rb.favorita = false;
                }
            }
        }
        bool buscarenArrayListaFavoCatEsta(string vcodigo, string[] listaFavoBeta1)
        {
            for (int n = 0; n < listaFavoBeta1.Length; n++)
            {
                if (listaFavoBeta1[n] == vcodigo)
                    return true;
            } 

            return false;
        }

        public string listaFavoritas() {
            StringBuilder sb = new StringBuilder(150);
            foreach (RegistroCatEstadistica rb in datos) {
                if (rb.favorita) {
                    sb.Append(rb.codigo).Append(',');
                }
            }
            if (sb.Length > 0) {
                sb.Length = sb.Length - 1;
                return sb.ToString();
            }
            return "0";
        }
    }
}
