import { Router } from "express";
import { protect } from "@/middlewares/auth.middleware";
import { attachShop } from "@/middlewares/shop.middleware";
import { requireAdminOrPosRoles } from "@/middlewares/authz.middleware";
import {
    createPromoCode,
    getAllPromoCodes,
    getPromoCodeById,
    updatePromoCode,
    deactivatePromoCode,
    applyPromoCode,
    removePromoCode,
} from "./promoCode.controller";

const router = Router();

router.use(protect);
router.use(attachShop);

// ── Admin CRUD ──
router.post("/promo-codes", requireAdminOrPosRoles("MANAGER"), createPromoCode);
router.get("/promo-codes", requireAdminOrPosRoles("MANAGER", "CASHIER"), getAllPromoCodes);
router.get("/promo-codes/:id", requireAdminOrPosRoles("MANAGER", "CASHIER"), getPromoCodeById);
router.patch("/promo-codes/:id", requireAdminOrPosRoles("MANAGER"), updatePromoCode);
router.delete("/promo-codes/:id", requireAdminOrPosRoles("MANAGER"), deactivatePromoCode);

// ── POS : appliquer / retirer un code promo sur une commande ──
router.post("/orders/:orderId/apply-promo", requireAdminOrPosRoles("MANAGER", "CASHIER"), applyPromoCode);
router.delete("/orders/:orderId/promo-usages/:usageId", requireAdminOrPosRoles("MANAGER", "CASHIER"), removePromoCode);

export default router;

