package ec.edu.espe.movilidad.MovilidadWS.Controller;

import ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUsuarioConPerfiles;
import ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUzyTPerfil;
import ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUzyTUsuario;
import ec.edu.espe.movilidad.MovilidadWS.Service.UzyTUsuario.IServiceUzyTUsuario;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Set;

import static ec.edu.espe.movilidad.MovilidadWS.Constant.GlobalConstants.V1_API_VERSION;

@RestController
@CrossOrigin(origins = "*")
@RequestMapping(V1_API_VERSION + "/usuario")

public class UzyTUsuarioController {


    private final IServiceUzyTUsuario serviceUzyTUsuario;


    public UzyTUsuarioController(IServiceUzyTUsuario serviceUzyTUsuario) {
        this.serviceUzyTUsuario = serviceUzyTUsuario;

    }

    @GetMapping("/exampleFindId/{id}")
    public DtoUzyTUsuario ListarPorID(@PathVariable Long id) {
        return serviceUzyTUsuario.ListarPorID(id);
    }

    @GetMapping("/getAll")
    public List<DtoUzyTUsuario> ListarRegistros() {
        return serviceUzyTUsuario.ListarRegistros();
    }
    @DeleteMapping("/eliminar_perfil/{uzytusuario_id}/{uzytperfil_id}")
    public DtoUsuarioConPerfiles eliminarPerfilDeUsuario(
            @PathVariable("uzytusuario_id") @NotNull Long uzytusuario_id,
            @PathVariable("uzytperfil_id") @NotNull Long uzytperfil_id) {
        return serviceUzyTUsuario.eliminarPerfilDeUsuario(uzytusuario_id, uzytperfil_id);

    }
    @GetMapping("/perfilUsuario/{uzytusuario_id}")
    public Set<DtoUzyTPerfil> findPerfilesByUsuarioId(@PathVariable Long uzytusuario_id) {
        return serviceUzyTUsuario.findPerfilesByUsuarioId(uzytusuario_id);
    }

    @PostMapping("/asignar_perfil/{uzytusuario_id}/{uzytperfil_id}")
    public DtoUsuarioConPerfiles asignarPerfilAUsuario(
            @PathVariable("uzytusuario_id") Long uzytusuario_id,
            @PathVariable("uzytperfil_id") Long uzytperfil_id) {
        return serviceUzyTUsuario.asignarPerfilAUsuario(uzytusuario_id, uzytperfil_id);
    }

    @GetMapping("/buscarUsuario")
    public List<DtoUzyTUsuario> buscarUsuarios(@RequestParam String usuario) {
        return serviceUzyTUsuario.findByUsuario(usuario);
    }

    @PostMapping("/guardar")
    public DtoUzyTUsuario guardar(@Valid @RequestBody DtoUzyTUsuario dtoUzyTUsuario) {
        return serviceUzyTUsuario.guardar(dtoUzyTUsuario);
    }


    @PutMapping("/editar/{id}")
    public DtoUzyTUsuario editar(@PathVariable Long id, @Valid @RequestBody DtoUzyTUsuario dtoUzyTUsuario) {
        return serviceUzyTUsuario.editar(id, dtoUzyTUsuario);
    }


    @DeleteMapping("/eliminar/{id}")
    public ResponseEntity<String> eliminar(@PathVariable Long id) {
        boolean eliminado = serviceUzyTUsuario.eliminar(id);
        if (eliminado) {
            return ResponseEntity.ok("El registro se eliminĂ³ exitosamente.");
        } else {
            return ResponseEntity.notFound().build();
        }
    }
}