package es.uv.saic.domain;

import java.util.Date;
import java.util.List;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import es.uv.saic.dto.EvidenciaBuscadorDTO;

@Repository
public interface TascaRepository extends JpaRepository<Tasca, Integer> {

	@Query(value=("SELECT * FROM tasques WHERE id_proces = ?1 ORDER BY id_tascap ASC"), nativeQuery=true)
	List<Tasca> findByProces(Integer idProces);
	
	@Query(value=("SELECT * FROM tasques WHERE id_proces = ?1 AND id_tascap = ?2"), nativeQuery=true)
	Tasca findByProcesTascap(Integer idProces, Integer idTascap);
	
	@Query(value=("SELECT DISTINCT codi_evidencia AS codiEvidencia, nom_evidencia_cas AS nomEvidenciaCas, nom_evidencia_val AS nomEvidenciaVal FROM tasques"), nativeQuery=true)
	List<EvidenciaBuscadorDTO> findAllEvidencies();
	
	@Query(value=("SELECT DISTINCT ta.codi_evidencia AS codiEvidencia, ta.nom_evidencia_cas AS nomEvidenciaCas, ta.nom_evidencia_val AS nomEvidenciaVal " + 
			"FROM tasques ta, tasquesi ti, instancies ia, processos pr " + 
			"WHERE ta.id_tasca = ti.id_tasca AND ti.id_instancia = ia.id_instancia AND ta.id_proces = pr.id_proces " + 
			"AND ia.centre IN (?1) AND ia.titulacio IN (?2) AND pr.curs_avaluat IN (?3)"), nativeQuery=true)
	List<EvidenciaBuscadorDTO> findEvidenciesByCentreTitulacioCurs(List<Integer> centres, List<Integer> titulacions, List<Integer> cursos);
	
	@Query(value=("SELECT DISTINCT codi_evidencia AS codiEvidencia, nom_evidencia_cas AS nomEvidenciaCas, "
			+ "id_tascap AS idTascap, nom_evidencia_val AS nomEvidenciaVal FROM tasques "
			+ "WHERE id_proces = ?1 AND codi_evidencia IS NOT NULL AND codi_evidencia <> ''"), nativeQuery=true)
	List<EvidenciaBuscadorDTO> getEvidencesByProcedure(Integer idProcedure);
	
	@Query(value=("SELECT DISTINCT codi_evidencia AS codiEvidencia "
			+ "FROM tasques "
			+ "WHERE codi_evidencia IS NOT NULL AND codi_evidencia <> ''"), nativeQuery=true)
	List<String> getAllAvailableEvidences();
	
	@Transactional
    @Modifying(flushAutomatically = true, clearAutomatically = true)
	@Query(value="INSERT INTO tasques VALUES(?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13)", nativeQuery=true)
    Integer create(Integer idTasca, Integer idProces, Integer idTascap, String titolCas, String descripcioCas, String titolVal, 
    		String descripcioVal, Date dataLim, Integer tipus, Integer idTascaSeg, Integer idTascaSeg2, Integer idRol, String codiEvidencia);
	
}
