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

import ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUzyTavProgObj;


import ec.edu.espe.movilidad.MovilidadWS.Service.UzyTavProgObj.IServiceUzyTavProgObj;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

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

@RestController
@CrossOrigin(origins = "*")
@RequestMapping(V1_API_VERSION + "/progObj")
public class UzyTavProgObjController {

    private final IServiceUzyTavProgObj serviceUzyTavProgObj;

    public UzyTavProgObjController(IServiceUzyTavProgObj serviceUzyTavProgObj) {
        this.serviceUzyTavProgObj = serviceUzyTavProgObj;
    }

    @GetMapping("/exampleFindId/{id}")
    public ResponseEntity<DtoUzyTavProgObj> ListarPorID(@PathVariable Long id) {
        return new ResponseEntity<>(serviceUzyTavProgObj.ListarPorID(id), HttpStatus.OK);
    }

    @GetMapping("/getAll")
    public ResponseEntity<List<DtoUzyTavProgObj>> ListarRegistros() {
        return new ResponseEntity<>(serviceUzyTavProgObj.ListarRegistros(), HttpStatus.OK);
    }

    @GetMapping("/registrosRelacionadosConPrograma/{programaId}")
    public ResponseEntity<List<DtoUzyTavProgObj>> ListarRegistrosRelacionadosConPrograma(@PathVariable Long programaId) {
        return new ResponseEntity<>(serviceUzyTavProgObj.obtenerTavProgObjPorPrograma(programaId), HttpStatus.OK);
    }

    @GetMapping("/registrosRelacionadosConProyecto/{proyectoID}")
    public ResponseEntity<List<DtoUzyTavProgObj>> ListarRegistrosRelacionadosConProyecto(@PathVariable Long proyectoID) {
        return new ResponseEntity<>(serviceUzyTavProgObj.obtenerTavProgObjPorProyecto(proyectoID), HttpStatus.OK);
    }

    @PostMapping("/guardar")
    public ResponseEntity<DtoUzyTavProgObj> guardar(@RequestBody DtoUzyTavProgObj dtoUzyTavProgObj) {
        DtoUzyTavProgObj creado = serviceUzyTavProgObj.guardar(dtoUzyTavProgObj);
        return ResponseEntity.status(HttpStatus.OK).body(creado);
    }

    @PutMapping("/editar/{id}")
    public ResponseEntity<DtoUzyTavProgObj> editar(@PathVariable Long id,
                                                   @RequestBody DtoUzyTavProgObj dtoUzyTavProgObj) {
        return new ResponseEntity<>(serviceUzyTavProgObj.editar(id, dtoUzyTavProgObj), HttpStatus.OK);
    }

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