import { logError, logInfo } from "@/lib/logger";
import { error as errorResponse, success } from "@/lib/response";
import type { CreateRCIBookingRequest, SendRCIUnitEDMRequest } from "@/v1/services/admin/bookings/booking.schema";
import { BookingsService } from "@/v1/services/admin/bookings/bookings.service";
import type { Context } from "hono";

export const createRCIBookingHandler = async (c: Context) => {
  try {
    logInfo("createRCIBookingHandler: Processing RCI booking creation request");

    const body = (await c.req.json()) as CreateRCIBookingRequest;

    logInfo(
      `Request body received: memberRecordID=${body.memberRecordID}, units=${body.units?.length ?? 0}`,
    );
    const service = BookingsService.getInstance();
    const result = await service.createRCIBooking(body);
    return success(c, result.data, result.message, 201);
  } catch (err: any) {
    logError("Error in createRCIBookingHandler:", err);

    const status = typeof err?.status === "number" ? err.status : 400;

    return errorResponse(
      c,
      err?.message || "Failed to create booking",
      status,
      err?.detail ?? err,
    );
  }
};

export const sendRCIUnitEDMHandler = async (c: Context) => {
  try {
    const unitId = c.req.param("unitId");
    logInfo(`sendRCIUnitEDMHandler: unitId=${unitId}`);

    const body = (await c.req.json()) as SendRCIUnitEDMRequest;
    logInfo(`sendRCIUnitEDMHandler: memberRecordID=${body.memberRecordID}`);

    const service = BookingsService.getInstance();
    const result = await service.sendRCIUnitEDM(unitId, body);

    return success(c, result.data, result.message, 200);
  } catch (err: any) {
    logError("Error in sendRCIUnitEDMHandler:", err);

    const status = typeof err?.status === "number" ? err.status : 400;

    return errorResponse(
      c,
      err?.message || "Failed to send EDM",
      status,
      err?.detail ?? err,
    );
  }
};
