package com.dacrt.SBIABackend.repository;

import java.math.BigDecimal;
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.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import com.dacrt.SBIABackend.entity.Instrumentriskfactors;
import com.dacrt.SBIABackend.entity.Riskfactorelements;
import com.dacrt.SBIABackend.entity.Riskfactors;

@Repository
public interface RiskfactorelementsRepository extends JpaRepository<Riskfactorelements,Integer>,JpaSpecificationExecutor<Riskfactorelements>{

			
		Optional<Riskfactorelements> getByName(String name);
		Optional<Riskfactorelements> getByRiskfactorid(String name);
		
		boolean existsById(Integer id);
		boolean existsByName(String name);
		boolean existsByNameAndIdNot(String name, Integer id);
		//List<Riskfactorelements> findByRiskfactorid(int id);
		List<Riskfactorelements> findByRiskfactorid_Id(Integer riskFactorId);
		List<Riskfactorelements> findByRiskfactoridId(Integer riskfactorid);
	    // O si tu campo en la entidad Riskfactorelements se llama literalmente 'riskfactorid' y es un Integer:
	   // List<Riskfactorelements> findByRiskfactorid(Integer riskFactorId);
	    List<Riskfactorelements> findByRiskfactorid(Riskfactors riskfactor);
	    @Query("SELECT r FROM Riskfactorelements r WHERE r.riskfactorid.id = :rfId")
	    List<Riskfactorelements> findByRiskfactorid(@Param("rfId") Integer rfId);
	    
		Optional<Riskfactorelements> findByName(String name);
		Optional<Riskfactorelements> findById(int id);
		
		@Transactional
		@Modifying
		@Query(" DELETE FROM Riskfactorelements e where e.id = ?1 ")
		void deleteRiskfactorelementsbyid(Integer id);
		
		@Transactional
		@Modifying
		@Query(" UPDATE Riskfactorelements e set e.weight= ?2 ,e.name=?3  WHERE e.id = ?1 ")
		void updateRiskfactorelementsbyid(Integer id,BigDecimal peso,String name);
		//update main.riskfactorelements set weight= 15,name='ELEMENTO 11' WHERE ID = 1 and riskfactorid = 1
	//	List<Riskfactorelements> findByRiskfactorid(Integer riskfactorid);
}
