import { Router } from "express"
import { attachShop } from "@/middlewares/shop.middleware"
import { protect } from "@/middlewares/auth.middleware"
import { requireAdmin } from "@/middlewares/auth/requireAdmin"
import {
    createShopPaymentMethodConfig,
    createStationPaymentMethodConfig,
    deleteShopPaymentMethodConfig,
    deleteStationPaymentMethodConfig,
    getPaymentConfigMeta,
    getShopPaymentMethodConfigs,
    getStationPaymentMethodConfigs,
    updateShopPaymentMethodConfig,
    updateStationPaymentMethodConfig
} from "./payment-config.controller"
import {
    createProviderAccount,
    createProviderDevice,
    deleteProviderAccount,
    deleteProviderDevice,
    getProviderAccounts,
    getProviderDevices,
    updateProviderAccount,
    updateProviderDevice
} from "./payment-provider-admin.controller"

const router = Router({ mergeParams: true })

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

// ── READ (POS + Admin) ──────────────────────────────
router.get("/meta", getPaymentConfigMeta)
router.get("/provider-accounts", getProviderAccounts)
router.get("/provider-devices", getProviderDevices)
router.get("/", getShopPaymentMethodConfigs)
router.get("/stations", getStationPaymentMethodConfigs)

// ── MUTATIONS (Admin only) ──────────────────────────
router.post("/provider-accounts", requireAdmin, createProviderAccount)
router.patch("/provider-accounts/:accountId", requireAdmin, updateProviderAccount)
router.delete("/provider-accounts/:accountId", requireAdmin, deleteProviderAccount)

router.post("/provider-devices", requireAdmin, createProviderDevice)
router.patch("/provider-devices/:deviceId", requireAdmin, updateProviderDevice)
router.delete("/provider-devices/:deviceId", requireAdmin, deleteProviderDevice)

router.post("/", requireAdmin, createShopPaymentMethodConfig)
router.patch("/:configId", requireAdmin, updateShopPaymentMethodConfig)
router.delete("/:configId", requireAdmin, deleteShopPaymentMethodConfig)

router.post("/stations", requireAdmin, createStationPaymentMethodConfig)
router.patch("/stations/:configId", requireAdmin, updateStationPaymentMethodConfig)
router.delete("/stations/:configId", requireAdmin, deleteStationPaymentMethodConfig)

export default router
