package es.uv.saic.web;

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

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RestController;

import es.uv.saic.domain.Rol;
import es.uv.saic.domain.Usuari;
import es.uv.saic.domain.UsuarisRol;
import es.uv.saic.dto.RolDTO;
import es.uv.saic.dto.UsuariDTO;
import es.uv.saic.service.RolService;
import es.uv.saic.service.UsuariService;
import es.uv.saic.service.UsuarisRolService;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;



@RestController
public class UsuariController {
    @Autowired
    UsuariService us;
    
    @Autowired
    UsuarisRolService urs;

    @Autowired
    RolService rs;

    @PostMapping("/grantedUser")
    public boolean isGrantedUser(@RequestBody Usuari usuari) {
        return urs.isGrantedUser(usuari);
    }
    
    @PostMapping("/grantedSupervisor")
    public boolean isGrantedSupervisor(@RequestBody Usuari usuari) {
        return urs.isGrantedSupervisor(usuari);
    }

    @PostMapping("/findActiveRols")
    public List<UsuarisRol> findActiveRols(@RequestBody Usuari usuari) {
        return urs.findActiveRols(usuari);
    }

	public boolean exists(String usuari, String tlugar, Integer lugar) {
		return urs.exists(usuari, tlugar, lugar);
	}

    @GetMapping("/find/allRols")
    public ResponseEntity<?> findAllRols() {
        try {
            List<Rol> rolList = rs.findAll();
            List<RolDTO> rolDTOList = new ArrayList<>();

            for(Rol rol: rolList) {
                rolDTOList.add(new RolDTO(rol));
            }

            return ResponseEntity.ok(rolDTOList);
        } catch (Exception e) {
             return ResponseEntity.badRequest().body("Error al obtener los roles: " +  e.getMessage());
        }
    }

    @GetMapping("/find/allUsers")
    public List<UsuariDTO> findAllUsers() {
        return us.findAll().stream().map(UsuariDTO::new).toList();
    }
    
    @GetMapping("/find/assignables")
    public List<RolDTO> findAssignables() {
        return rs.findAssignables().stream().map(RolDTO::new).toList();
    }
    

}
