package com.dacrt.SBIABackend.repository;


import java.util.List;
import java.util.Optional;

import javax.transaction.Transactional;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.stereotype.Repository;

import com.dacrt.SBIABackend.dto.UnitsDtoStatus;
import com.dacrt.SBIABackend.entity.Unitprocesses;
import com.dacrt.SBIABackend.entity.Units;
import com.dacrt.SBIABackend.entity.Userunits;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;


//import com.dacrt.SBIABackend.security.dto.ParamsDto;
import com.dacrt.SBIABackend.security.entity.Params;
import com.dacrt.SBIABackend.security.entity.Users;

@Repository
public interface UnitprocessesRepository extends JpaRepository<Unitprocesses,Integer>,JpaSpecificationExecutor<Unitprocesses>{
	
	
	@Query("SELECT count(c) FROM Unitprocesses c")
	long countRegUnits();
	
	//Unitprocesses findByUnidit(int id);	 
	
	List<Unitprocesses> findByUnitid(int unitid);
	Unitprocesses findByUnitidAndProcessid(int unitid,int processid);
	boolean existsByUnitidAndProcessid(int unitid,int processid);
	//findByNameAndApellido
	//List<Userunits> findByUserid(int userid);
    //Optional<Userunits> findById(int id);
	
	//List<Userunits> findByUserid(int userid);
	
	@Transactional
	@Modifying
	@Query(" DELETE FROM Unitprocesses e where e.unitid = ?1 ")
	void borrarUnitsProcesses(int idunit);
	
	boolean existsByProcessid(int processid);
	
	@Transactional
	@Modifying
	@Query(" DELETE FROM Unitprocesses pc where pc.processid = ?1 ")
	void borrarProcessesUnits(int processid);
	
	@Query(" SELECT up.processid from Unitprocesses up WHERE up.unitid = ?1 and up.processid NOT IN ?2" )
	List<Integer> findIdProcDelete(int unitid,List<Integer> procesos);
	
	@Query(" SELECT up.processid from Unitprocesses up WHERE up.unitid = ?1 and up.processid IN ?2" )
	List<Integer> findIdProcNew(int unitid,List<Integer> procesos);
	
	@Query(" SELECT count(1) from Unitprocesses up WHERE up.unitid = ?1 and up.processid = ?2 AND up.deleted is not null" )
	Integer findProceEliminado(int unitid,int processid);
	
	//select * from main.unitprocesses where unitid = 2 and processid  not in (1,2,3,4) 
	
}
