using System;
using System.Collections;
using System.Data.OleDb;
using System.Data.SqlClient;
using banco1.persistencia;

namespace banco1.domain
{
	/// <summary>
	/// Representa un Cliente del banco.
	/// </summary>
	public class Cliente
	{
		protected String mNombre;
		protected String mApellidos;
		protected String mNIF;
		protected ArrayList mProductos;

		public Cliente(String nif) 
		{
			String SQL="Select Nombre, Apellidos from Clientes where NIF=?";
			OleDbCommand cmd=Broker.getCommand(SQL);
			cmd.Parameters.Add("", OleDbType.VarChar).Value=nif;
			OleDbDataReader r=cmd.ExecuteReader();
			if (r.Read()) 
			{
				this.mNIF=nif;
				mNombre=r.GetString(0);
				mApellidos=r.GetString(1);
			} 
			cmd.Connection.Close();
		}

		public Cliente(String nif, String nombre, String apellidos)
		{
			mNIF=nif;
			mNombre=nombre;
			mApellidos=apellidos;
		}

		public virtual void insert() 
		{
			String SQL="Insert into Clientes " +
				"(NIF, Nombre, Apellidos) values (?, ?, ?)";
			OleDbCommand cmd = Broker.getCommand(SQL);
			cmd.Parameters.Add("", OleDbType.VarChar).Value=this.mNIF;
			cmd.Parameters.Add("", OleDbType.VarChar).Value=this.mNombre;
			cmd.Parameters.Add("", OleDbType.VarChar).Value=this.mApellidos;
			cmd.ExecuteNonQuery();
			cmd.Connection.Close();
		}

		public String nombre 
		{
			get { return mNombre; }
		}

		public String apellidos 
		{
			get { return mApellidos; }
		}

		public String nif
		{
			get { return mNIF; }
		}

		public ArrayList productos 
		{
			get { return this.mProductos; }
		}

		public void contratar(Producto p) 
		{
			if (p.estaActivo()) 
			{
				p.add(this);
				p.add(this);
			}
		}

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