/**
 * Intégration des userId dans les contrôleurs
 *
 * Pour que les ShopEvent incluent l'actorUserId (qui a effectué l'action),
 * il faut passer le userId aux services métier.
 *
 * Pattern recommandé :
 */

// ✅ Exemple : OrderController
import { asyncHandler } from "@/core/asyncHandler"

export const updateOrderStatus = asyncHandler(async (req, res) => {
    const { orderId } = req.params
    const { status } = req.body

    // ✅ Récupérer l'ID de l'utilisateur actuellement authentifié
    const userId = req.auth?.sub

    // ✅ Passer userId au service
    const updatedOrder = await orderService.updateStatus(
        shopId,
        orderId,
        status,
        userId  // ← Passé ici
    )

    res.json(updatedOrder)
})

// ✅ Exemple : ProductController
export const createProduct = asyncHandler(async (req, res) => {
    const { name, price, vatRate, categoryId, stationId } = req.body
    const shopId = req.params.shopId
    const userId = req.auth?.sub

    const product = await productService.create(
        shopId,
        { name, price, vatRate, categoryId, stationId },
        userId  // ← Passé ici
    )

    res.json(product)
})

// ✅ Exemple : CashSessionController
export const openSession = asyncHandler(async (req, res) => {
    const { openingCash } = req.body
    const shopId = req.params.shopId
    const userId = req.auth?.sub  // ← UserId du user authentifié

    const session = await cashSessionService.open(
        shopId,
        userId,
        openingCash
    )

    res.json(session)
})

/**
 * CHECKLIST : Intégration userId dans les contrôleurs
 *
 * Order Controllers:
 * [ ] POST /orders - createDraft(shopId, userId)
 * [ ] PATCH /orders/:id - updateStatus(shopId, orderId, status, userId)
 * [ ] PATCH /orders/:id/items - addItems(shopId, orderId, items, userId)
 *
 * Product Controllers:
 * [ ] POST /products - create(shopId, data, userId)
 * [ ] PATCH /products/:id - update(shopId, id, data, userId)
 * [ ] DELETE /products/:id - softDelete(shopId, id, userId)
 *
 * CashSession Controllers:
 * [ ] POST /cash-sessions/open - open(shopId, userId, openingCash)
 * [ ] POST /cash-sessions/close - close(shopId, userId, closingCash)
 *
 * ShopUser Controllers:
 * [ ] POST /shop-users - create(shopId, data, userId)
 * [ ] PATCH /shop-users/:id - update(shopId, id, data, userId)
 *
 * Résultat: Tous les ShopEvent auront actorUserId rempli ✅
 */

