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,
    getProviderDeviceCatalog,
    getProviderDevices,
    refreshProviderAccountMetadata,
    runProviderAccountConnectionDiagnostic,
    runProviderAccountWebhookDiagnostic,
    runProviderAccountWebhookSimulationDiagnostic,
    runProviderDeviceTerminalDiagnostic,
    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.get("/provider-accounts/:accountId/device-catalog", requireAdmin, getProviderDeviceCatalog)
router.post("/provider-accounts/:accountId/metadata/refresh", requireAdmin, refreshProviderAccountMetadata)
router.post("/provider-accounts/:accountId/diagnostics/connection", requireAdmin, runProviderAccountConnectionDiagnostic)
router.post("/provider-accounts/:accountId/diagnostics/webhook", requireAdmin, runProviderAccountWebhookDiagnostic)
router.post("/provider-accounts/:accountId/diagnostics/webhook/simulate", requireAdmin, runProviderAccountWebhookSimulationDiagnostic)

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

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
