package com.ejie.ab61.service.busquedas;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.ejie.ab61.dao.busquedas.BusquedasDao;
import com.ejie.ab61.dao.parametros.ParametrosDao;
import com.ejie.ab61.model.busquedas.Busquedas;
import com.ejie.ab61.model.parametros.Parametros;
import com.ejie.x38.dto.JQGridRequestDto;
import com.ejie.x38.dto.JQGridResponseDto;
import com.ejie.x38.dto.TableRowDto;

/**
 * BusquedasServiceImpl
 * 
 * 
 */

@Service(value = "busquedasService")
public class BusquedasServiceImpl implements BusquedasService {

	@Autowired
	private BusquedasDao busquedasDao;
	@Autowired
	private ParametrosDao parametrosDao;

	/**
	 * Inserts a single row in the Listados table.
	 *
	 * @param listados
	 *            Busquedas
	 * @return Busquedas
	 */
	@Transactional(rollbackFor = Throwable.class)
	public Busquedas add(Busquedas busquedas) {
		return this.busquedasDao.add(busquedas);
	}

	//
	/**
	 * Updates a single row in the Busquedas table.
	 *
	 * @param busquedas
	 *            Busquedas
	 * @return Busquedas
	 */
	@Transactional(rollbackFor = Throwable.class)
	public Busquedas update(Busquedas busquedas) {
		return this.busquedasDao.update(busquedas);
	}

	/**
	 * Finds a single row in the Busquedas table.
	 *
	 * @param busquedas
	 *            Busquedas
	 * @return Busquedas
	 */
	public Busquedas find(Busquedas busquedas) {
		return (Busquedas) this.busquedasDao.find(busquedas);
	}

	/**
	 * Deletes a single row in the Busquedas table.
	 *
	 * @param busquedas
	 *            Busquedas
	 */
	@Transactional(rollbackFor = Throwable.class)
	public void remove(Busquedas busquedas) {
		this.parametrosDao.removeList(busquedas.getIdBusqueda());
		this.busquedasDao.remove(busquedas);
	}

	//
	// /**
	// * Finds a list of rows in the Listados table.
	// *
	// * @param listados
	// * Listados
	// * @param jqGridRequestDto
	// * JQGridRequestDto
	// * @return List<Listados>
	// */
	// public List<Listados> findAll(Listados listados, JQGridRequestDto
	// jqGridRequestDto) {
	// return (List<Listados>) this.listadosDao.findAll(listados,
	// jqGridRequestDto);
	// }
	//
	/**
	 * Finds rows in the Listados table using like.
	 *
	 * @param filterBusquedas
	 *            Busquedas
	 * @param jqGridRequestDto
	 *            JQGridRequestDto
	 * @param startsWith
	 *            Boolean
	 * @return List<Busquedas>
	 */
	public List<Busquedas> findAllLike(Busquedas filterBusquedas, JQGridRequestDto jqGridRequestDto,
			Boolean startsWith) {
		List<Busquedas> listaBusquedas = this.busquedasDao.findAllLike(filterBusquedas, null, false);
		List<Busquedas> resultado = new ArrayList<Busquedas>();
		for (Busquedas busquedas : listaBusquedas) {
			Parametros filterParametros = new Parametros();
			filterParametros.setIdBusqueda(busquedas.getIdBusqueda());
			List<Parametros> listaParametros = this.parametrosDao.findAllLike(filterParametros, null, false);
			busquedas.setParametros(listaParametros);
			resultado.add(busquedas);
		}
		return resultado;
	}

	/*
	 * OPERACIONES RUP_TABLE
	 */

	/**
	 * Filter method in the Listados table.
	 *
	 * @param filterListados
	 *            Listados
	 * @param jqGridRequestDto
	 *            JQGridRequestDto
	 * @param startsWith
	 *            Boolean
	 * @return JQGridResponseDto<Listados>
	 */
	public JQGridResponseDto<Busquedas> filter(Busquedas filterBusquedas, JQGridRequestDto jqGridRequestDto,
			Boolean startsWith) {
		List<Busquedas> listaBusquedas = this.busquedasDao.findAllLike(filterBusquedas, jqGridRequestDto, false);
		Long recordNum = this.busquedasDao.findAllLikeCount(filterBusquedas != null ? filterBusquedas : new Busquedas(),
				false);
		if (jqGridRequestDto.getMultiselection().getSelectedIds() != null) {
			List<TableRowDto<Busquedas>> reorderSelection = this.busquedasDao.reorderSelection(filterBusquedas,
					jqGridRequestDto, startsWith);
			return new JQGridResponseDto<Busquedas>(jqGridRequestDto, recordNum, listaBusquedas, reorderSelection);
		}
		return new JQGridResponseDto<Busquedas>(jqGridRequestDto, recordNum, listaBusquedas);
	}
	//
	// /**
	// * Reorder the selection made in Listados table.
	// *
	// * @param filterListados
	// * Listados
	// * @param jqGridRequestDto
	// * JQGridRequestDto
	// * @param startsWith
	// * Boolean
	// * @return Object
	// */
	// public Object reorderSelection(Listados filterListados, JQGridRequestDto
	// jqGridRequestDto, Boolean startsWith) {
	// return this.listadosDao.reorderSelection(filterListados,
	// jqGridRequestDto, startsWith);
	// }
	//
	// /*
	// * OPERACIONES RUP_TABLE JERARQUIA
	// */
}
