using System;
using System.Collections;
using System.Xml;

namespace banco1.domain
{
	/// <summary>
	/// Descripción breve de ListaDeCuentas.
	/// </summary>
	public class ListaDeCuentas
	{
		protected ArrayList mCuentas;

		public ListaDeCuentas()
		{
			mCuentas=new ArrayList();
			XmlDocument doc = new XmlDocument();
			XmlTextReader reader = new XmlTextReader("..\\..\\cuentas.xml");
			doc.Load(reader);
			XmlNodeList cuentas=doc.ChildNodes[1].ChildNodes;
			for (int i=0; i<cuentas.Count; i++) 
			{
				XmlNode nodoCuenta=cuentas[i];
				String sucursal=nodoCuenta.Attributes["sucursal"].Value;
				String ccc=nodoCuenta.Attributes["ccc"].Value;
				bool bloqueada=nodoCuenta.Attributes["bloqueada"].Value.Equals("si");
				DateTime fechaCreacion=DateTime.Parse(nodoCuenta.Attributes["creacion"].Value);
				XmlNode nodoCancel=nodoCuenta.Attributes["cancelacion"];
				DateTime fechaCancel=DateTime.MinValue;
				if (nodoCancel!=null)
					fechaCancel=DateTime.Parse(nodoCancel.Value);
				Cuenta cuenta=new Cuenta(sucursal, ccc, !bloqueada, fechaCreacion, fechaCancel);
				cuenta.cargaMovimientos(nodoCuenta);
				XmlNodeList nodoTitulares=nodoCuenta.ChildNodes[0].ChildNodes;
				for (int j=0; j<nodoTitulares.Count; j++) 
				{
					XmlNode nodoTitular=nodoTitulares[j];
					String nif=nodoTitular.Attributes["nif"].Value;
					Cliente cliente=ListaDeClientes.find(nif);
					cuenta.add(cliente);
					cliente.add(cuenta);
				}
				mCuentas.Add(cuenta);
			}
		}

		public Cuenta this[String numero] 
		{
			get { 
				for (int i=0; i<mCuentas.Count; i++) 
				{
					Cuenta c=(Cuenta) mCuentas[i];
					if (c.numero.Equals(numero))
						return c;
				}
				return null;
			}
			set { mCuentas.Add(value); }
		}

		public void add(Cuenta c) 
		{
			this.mCuentas.Add(c);
		}
	}
}
