package jumapacelaya.gob.mx.vv.controlador;

import java.util.List;
import java.util.Map;

import io.micronaut.http.HttpResponse;
import io.micronaut.http.MediaType;
import io.micronaut.http.annotation.Body;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;
import io.micronaut.http.annotation.PathVariable;
import io.micronaut.http.annotation.Post;
import jakarta.inject.Inject;
import jumapacelaya.gob.mx.vv.dto.citaDTO;
import jumapacelaya.gob.mx.vv.dto.horarioDisponibleDTO;
import jumapacelaya.gob.mx.vv.dto.tramiteDTO;
import jumapacelaya.gob.mx.vv.servicio.VvServicio;

@Controller("/vv")
public class VvControlador {

    @Inject
    VvServicio servicio;

    @Get("/citas/getdiasdisponibles/{punto}/{dias}")
    public HttpResponse<?> obtenerDiasDisponibles(@PathVariable Integer punto, @PathVariable Integer dias) {
        try {
            return HttpResponse.ok(servicio.obtenerDiasDisponibles(punto, dias));
        } catch (Exception e) {
            throw new RuntimeException("Error al obtener días disponibles", e);
        }
    }

    @Get("/citas/gethorariosdisponibles/{punto}/{dia}")
    public List<horarioDisponibleDTO> obtenerHorariosDisponibles(Integer punto, String dia) {
        return servicio.obtenerHorariosDisponibles(punto, dia);
    }

    @Post(uri = "/citas/guardar", consumes = MediaType.APPLICATION_JSON)
    public HttpResponse<?> guardarCita(@Body Map<String, Object> body) {
        try {
            int puntoId = Integer.parseInt(body.get("ppuntoid").toString());
            int tipoTramite = Integer.parseInt(body.get("ptipotramite").toString());
            String dia = body.get("pdia").toString();         // formato: dd/mm/yyyy
            String horario = body.get("phorario").toString(); // formato: hh:mm
            String telefono = body.get("ptelefono").toString();
            String email = body.get("pemail").toString();

            String resultado = servicio.guardarCita(puntoId, tipoTramite, dia, horario, telefono, email);

            return HttpResponse.ok(Map.of(
                    "status", "200",
                    "message", "Cita generada",
                    "data", resultado
            ));

        } catch (Exception e) {
            return HttpResponse.serverError(Map.of(
                    "status", "500",
                    "message", "Error al generar cita",
                    "error", e.getMessage()
            ));
        }
    }

    @Post("/citas/tramites/guardar")
    public HttpResponse<?> guardarTramite(@Body tramiteDTO tramite) {
        try {
            String mensaje = servicio.guardarTramite(tramite);
            return HttpResponse.ok().body(mensaje);
        } catch (Exception e) {
            return HttpResponse.serverError("Error al guardar trámite: " + e.getMessage());
        }
    }
}
