package com.dacrt.SBIABackend.security.service;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;

import javax.transaction.Transactional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.dacrt.SBIABackend.security.dto.RolAccesoDto;
import com.dacrt.SBIABackend.security.entity.Rol;
import com.dacrt.SBIABackend.security.entity.RolOpcionDeBIA;
import com.dacrt.SBIABackend.security.entity.Usuario;
import com.dacrt.SBIABackend.security.enums.RolNombre;
import com.dacrt.SBIABackend.security.repository.RolOpcionDeBIARepository;
import com.dacrt.SBIABackend.security.repository.RolRepository;

@Service
@Transactional
public class RolService {
	@Autowired
	RolRepository rolRepository;
	
	@Autowired
	RolOpcionDeBIARepository rolOpcionDeBIARepository;
	
	public Optional<Rol> getByRolNombre(String rolNombre){
		return rolRepository.findByRolNombre(rolNombre);
	}
	
	public List<RolAccesoDto> getRoles() {
		
		List<RolAccesoDto> listaRoles = new ArrayList<>();
		List<Rol> roles = StreamSupport
                .stream(rolRepository.findAll().spliterator(), false)
                .collect(Collectors.toList());
		for (Rol rol: roles) {

			RolAccesoDto rolAccesoDto = new RolAccesoDto(rol.getId(),rol.getRolNombre());
			listaRoles.add(rolAccesoDto);
		}
		return listaRoles;
	}
	
	public void save(Rol rol) {
		rolRepository.save(rol);
	}
	
	public Set<RolOpcionDeBIA> buscarOpcionesDeRol(String rolNombre) {
		
		Optional<Rol> optionalRol = getByRolNombre(rolNombre);
		Set<RolOpcionDeBIA> rolesOpcionesDeBIA = optionalRol.isPresent()?rolOpcionDeBIARepository.findByRol(optionalRol.get()):new HashSet<RolOpcionDeBIA>();
		
		return rolesOpcionesDeBIA;
		
	}
	
	public boolean existsByRolNombre(String rolNombre) {
		return rolRepository.existsByRolNombre(rolNombre);
	}
}
