package es.dalocar.software.delegates;

import java.util.List;

import es.dalocar.software.ApplicationManager;
import es.dalocar.software.beans.Cliente;
import es.dalocar.software.daos.ClienteDAO;


/**
 * Business Delegate para Cliente
 * 
 * @author aytovalencia
 * 
 */
public class ClienteDelegate {

	private ClienteDAO dao;

	/**
	 * Public constructor
	 * 
	 * @param manager
	 *            {@link ApplicationManager}
	 */
	public ClienteDelegate(ApplicationManager manager) {
		dao = (ClienteDAO) manager.getClienteDAO();
	}

	/**
	 * Listar todos los elementos existentes
	 * 
	 * @return
	 */
	public List getAll() {
		// TODO: Descomentar la siguiente línea o cambiar el texto propuesto
		return (List) dao.findAll();
	}

	/**
	 * Listar todos los elementos existentes buscando por una cadena
	 * 
	 * @param str
	 * 
	 * @return
	 */
	public List search(String str) {

		List list = null;
		// TODO: Descomentar la siguiente línea y cambiar el texto para buscar
		// por la propiedad deseada ej: searchByLikeDes
		// list = dao.findByLikeField(str);
		return list;
	}

	/**
	 * Búsqueda básica de objetos {@link Cliente} por su identificador
	 * 
	 * @param str
	 *            id del objeto
	 * @return un objeto {@link Cliente} que estará vacio si no hay datos
	 */
	public Cliente searchById(String str) {
		return this.searchById(Integer.parseInt(str));
	}
	
	/**
	 * Búsqueda básica de objetos {@link Cliente} por su identificador
	 * 
	 * @param str
	 *            id del objeto
	 * @return un objeto {@link Cliente} que estará vacio si no hay datos
	 */
	public Cliente searchById(Integer str) {
		return dao.findById(str);
	}

	/**
	 * Realiza una búsqueda a partir de los criterios seleccionados
	 * {@link Cliente}
	 * 
	 * @param Criterios
	 *            de búsqueda de Cliente
	 * @return Devuelve una lista de objetos Cliente
	 */
	public List searchCliente(es.dalocar.software.ClienteSearch searchBean) {
		
		return dao.searchCliente(searchBean.getIdentificador(), searchBean.getCif(), searchBean.getNombre()); 
	}

	/**
	 * Crea un nuevo Cliente
	 * 
	 * @param Cliente
	 *            el Java Bean a crear
	 */
	public void create(Cliente bean) {
		dao.save(bean);
	}

	/**
	 * Actualiza un objeto {@linkCliente}
	 * 
	 * @param Cliente
	 *            objeto a actualizar
	 */
	public void update(Cliente bean) {
		dao.update(bean);
	}

	/**
	 * Compueba la existencia de un objeto {@link Cliente} en la B.D.
	 * 
	 * @param bean
	 *            objeto a comprobar
	 * @return true si existe, false en caso contrario
	 */
	public boolean exists(Cliente bean) {
		boolean existe = false;
		// TODO Descomentar la siguiente linea y ambiar para que busque
		// correctamente por el Id. Claves compuestas o nombre de la clave
		// existe = (dao.findById(bean.getId())!=null);
		return existe;
	}

	/**
	 * Borra un objeto {@link Cliente}
	 * 
	 * @param bean
	 *            objeto a borrar
	 */
	public void delete(Cliente bean) {
		dao.delete(bean);
	}
	
	/**
	 * Obtiene el siguiente identificador a otorgar a un Cliente
	 * @return El siguiente identificador
	 */
	public Integer getNextId() {
		return dao.getMaxId() + 1;
	}

}
