import { Router } from "express";
import {
    getOrdersForShop,
    createOrder,
    getOrder,
    deleteOrder,
    getOrdersPending,
    replaceItems,
    updateOrder,
    finalizeOrder,
    unfinalizeOrder,
    restoreCancelledOrder,
    addItem,
    addItems,
    decrementItem,
    decrementItemsBatch,
    replaceDepositLines,
    completeZeroAmountOrder
} from "./order.controller";

import { protect } from "@/middlewares/auth.middleware";
import { attachShop } from "@/middlewares/shop.middleware";
import { requirePosRoles } from "@/middlewares/authz.middleware";

const router = Router();

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

router.get("/", getOrdersForShop);
router.get("/pending", getOrdersPending);
router.get("/:id", getOrder);

router.post("/", requirePosRoles("MANAGER", "CASHIER", "STAFF"), createOrder);
router.patch("/:id", requirePosRoles("MANAGER", "CASHIER"), updateOrder);
router.patch("/:id/items", requirePosRoles("MANAGER", "CASHIER", "STAFF"), replaceItems);
router.patch("/:id/deposits", requirePosRoles("MANAGER", "CASHIER", "STAFF"), replaceDepositLines);
router.post("/:id/add-item", requirePosRoles("MANAGER", "CASHIER", "STAFF"), addItem);
router.post("/:id/add-items", requirePosRoles("MANAGER", "CASHIER", "STAFF"), addItems);
router.post("/:id/decrement-item", requirePosRoles("MANAGER", "CASHIER", "STAFF"), decrementItem);
router.post("/:id/decrement-items", requirePosRoles("MANAGER", "CASHIER", "STAFF"), decrementItemsBatch);
router.post("/:id/finalize", requirePosRoles("MANAGER", "CASHIER"), finalizeOrder);
router.post("/:id/unfinalize", requirePosRoles("MANAGER", "CASHIER"), unfinalizeOrder);
router.post("/:id/restore", requirePosRoles("MANAGER", "CASHIER"), restoreCancelledOrder);
router.post("/:id/complete-zero", requirePosRoles("MANAGER", "CASHIER"), completeZeroAmountOrder);
router.delete("/:id", requirePosRoles("MANAGER", "CASHIER"), deleteOrder);

export default router;