/**
 * DELETE /api/cart/items/:id
 *
 * Remove an item from the shopping cart
 *
 * Validation:
 * - Cart item must exist
 * - Cart item must belong to current user/session
 *
 * Response:
 * - 204 No Content on success
 * - 404 Not Found if item doesn't exist or doesn't belong to user
 */

import { z } from 'zod'
import { eq } from 'drizzle-orm'
import { cartItems } from '../../../database/schema'

// Path params validation
const pathParamsSchema = z.object({
  id: z.string().uuid('Invalid cart item ID'),
})

export default defineEventHandler(async (event) => {
  // Validate path params
  const params = await getValidatedRouterParams(event, pathParamsSchema.parse)
  const cartItemId = params.id

  // Verify cart item belongs to current user/session
  const hasPermission = await verifyCartItemOwnership(event, cartItemId)

  if (!hasPermission) {
    throw createError({
      statusCode: 404,
      statusMessage: 'Cart item not found',
    })
  }

  const db = await useDatabase()

  // Fetch cart item to get cart ID for timestamp update
  const cartItem = await db.query.cartItems.findFirst({
    where: eq(cartItems.id, cartItemId),
    with: {
      cart: true,
    },
  })

  if (!cartItem) {
    throw createError({
      statusCode: 404,
      statusMessage: 'Cart item not found',
    })
  }

  // Delete cart item
  await db.delete(cartItems).where(eq(cartItems.id, cartItemId))

  // Update cart timestamp
  await touchCart(cartItem.cart.id)

  // Return 204 No Content
  setResponseStatus(event, 204)
  return null
})
