/**
 * GET /api/products/[id]
 *
 * Returns a single product by UUID.
 * Returns 404 if product is not found or is inactive.
 */

import { z } from 'zod'
import { and, eq } from 'drizzle-orm'
import { products } from '../../database/schema'

// UUID validation schema
const paramsSchema = z.object({
  id: z.string().uuid('Invalid product ID format'),
})

export default defineEventHandler(async (event) => {
  const db = useDatabase()

  // Validate and extract product ID from route params
  const params = await getValidatedRouterParams(event, paramsSchema.parse)

  try {
    // Fetch product by ID (must be active)
    const product = await db.query.products.findFirst({
      where: and(eq(products.id, params.id), eq(products.active, true)),
    })

    // Return 404 if product not found or inactive
    if (!product) {
      throw createError({
        statusCode: 404,
        statusMessage: 'Product not found',
      })
    }

    return product
  } catch (error) {
    // Re-throw createError errors as-is
    if (error && typeof error === 'object' && 'statusCode' in error) {
      throw error
    }

    console.error('Error fetching product:', error)
    throw createError({
      statusCode: 500,
      statusMessage: 'Failed to fetch product',
    })
  }
})
