import {
  createPromoCodeHandler,
  deletePromoCodeHandler,
  getPromoCodeByCodeHandler,
  listPromoCodesHandler,
  updatePromoCodeHandler,
} from "@/controllers/admin/promo-codes/promo-codes.controller";
import {
  sanitizePayload,
  sanitizeQueryParams,
} from "@/internal/middlewares/sanitzePayload";
import { withConsoleUserSession } from "@/middlewares/withConsoleUserSession";
import { withConsoleUserRole } from "@/middlewares/console-role";
import {
  CreatePromoCodeSchema,
  ListPromoCodesQuerySchema,
  UpdatePromoCodeSchema,
} from "@/v1/services/admin/promo-codes/promo-codes.schema";
import { Hono } from "hono";

export const PromoCodesRoutes = new Hono();

PromoCodesRoutes.post(
  "/",
  withConsoleUserSession(),
  withConsoleUserRole("promo-codes", "create"),
  sanitizePayload(CreatePromoCodeSchema),
  createPromoCodeHandler,
);

PromoCodesRoutes.patch(
  "/:id",
  withConsoleUserSession(),
  withConsoleUserRole("promo-codes", "update"),
  sanitizePayload(UpdatePromoCodeSchema),
  updatePromoCodeHandler,
);

PromoCodesRoutes.get(
  "/",
  withConsoleUserSession(),
  withConsoleUserRole("promo-codes", "read"),
  sanitizeQueryParams(ListPromoCodesQuerySchema),
  listPromoCodesHandler,
);

PromoCodesRoutes.get(
  "/:code",
  withConsoleUserSession(),
  withConsoleUserRole("promo-codes", "read"),
  getPromoCodeByCodeHandler,
);

PromoCodesRoutes.delete(
  "/:id",
  withConsoleUserSession(),
  withConsoleUserRole("promo-codes", "delete"),
  deletePromoCodeHandler,
);
