import { NextResponse } from 'next/server'
import { getCurrentUser } from '@/lib/auth'
import { getGameDbPool, getGameDbConfig } from '@/lib/game-db'
import { getCharactersByDiscordId } from '@/lib/services/character-service'
import type { RowDataPacket } from 'mysql2'

export const dynamic = 'force-dynamic'

export async function GET(
  request: Request,
  { params }: { params: Promise<{ id: string }> }
) {
  try {
    const user = await getCurrentUser()
    if (!user) {
      return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })
    }

    const { id: characterId } = await params
    const discordId = user.discordId

    if (!discordId) {
      return NextResponse.json({ error: 'No Discord ID linked' }, { status: 400 })
    }

    // Verify this character belongs to the user
    const characters = await getCharactersByDiscordId(discordId)
    const character = characters.find(c => c.id === characterId || c.citizenid === characterId)
    
    if (!character) {
      return NextResponse.json({ error: 'Character not found or access denied' }, { status: 403 })
    }

    const config = await getGameDbConfig()
    if (!config) {
      return NextResponse.json({ error: 'Game database not configured' }, { status: 500 })
    }

    const pool = await getGameDbPool()
    if (!pool) {
      return NextResponse.json({ error: 'Database connection failed' }, { status: 500 })
    }

    let vehicles: any[] = []

    if (config.framework === 'QBCORE') {
      const [rows] = await pool.query<RowDataPacket[]>(
        `SELECT * FROM player_vehicles WHERE citizenid = ?`,
        [characterId]
      )
      
      vehicles = rows.map(row => {
        const mods = typeof row.mods === 'string' ? JSON.parse(row.mods) : row.mods
        return {
          id: row.id,
          plate: row.plate,
          model: row.vehicle || row.hash,
          garage: row.garage,
          state: row.state === 1 ? 'stored' : row.state === 0 ? 'out' : 'impounded',
          fuel: row.fuel || 100,
          engine: row.engine || 1000,
          body: row.body || 1000,
          mods: mods,
          depotPrice: row.depotprice || 0,
        }
      })
    } else {
      // ESX
      const [rows] = await pool.query<RowDataPacket[]>(
        `SELECT * FROM owned_vehicles WHERE owner = ?`,
        [character.identifier || characterId]
      )
      
      vehicles = rows.map(row => {
        const vehicle = typeof row.vehicle === 'string' ? JSON.parse(row.vehicle) : row.vehicle
        return {
          id: row.id,
          plate: row.plate,
          model: vehicle?.model || row.vehicle,
          garage: row.garage || 'Unbekannt',
          state: row.stored === 1 ? 'stored' : 'out',
          fuel: vehicle?.fuelLevel || 100,
          mods: vehicle,
        }
      })
    }

    return NextResponse.json({ vehicles })
  } catch (error) {
    console.error('[Vehicles API] Error:', error)
    return NextResponse.json({ error: 'Internal server error' }, { status: 500 })
  }
}
