import { NextResponse } from 'next/server'
import { prisma } from '@/lib/db'

export async function POST(request: Request) {
  try {
    const data = await request.json()
    const { apiKey, discordId, serverId, player, online } = data

    // Validate API key
    const settings = await prisma.panelSettings.findFirst()
    if (!settings) {
      return NextResponse.json({ error: 'Panel not configured' }, { status: 500 })
    }

    // In production, validate the API key against stored value
    // For now, we'll accept any key for demo purposes

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

    // Find or create player profile
    let profile = await prisma.playerProfile.findFirst({
      where: {
        discordId,
        serverId: serverId || 'default'
      }
    })

    if (!profile) {
      profile = await prisma.playerProfile.create({
        data: {
          discordId,
          serverId: serverId || 'default',
          displayName: player?.firstName ? `${player.firstName} ${player.lastName}` : null,
          phoneNumber: player?.phone
        }
      })
    }

    // If player data provided, sync character
    if (player && player.identifier) {
      const existingChar = await prisma.character.findFirst({
        where: { identifier: player.identifier }
      })

      const characterData = {
        identifier: player.identifier,
        firstName: player.firstName || 'Unknown',
        lastName: player.lastName || 'Unknown',
        dateOfBirth: player.dateOfBirth,
        job: player.job,
        jobGrade: player.jobGrade,
        cash: player.cash || 0,
        bank: player.bank || 0,
        black: player.black || 0,
        phone: player.phone,
        lastPosition: player.position ? JSON.stringify(player.position) : null,
        isOnline: online ?? true,
        lastSeen: new Date(),
        profileId: profile.id
      }

      if (existingChar) {
        await prisma.character.update({
          where: { id: existingChar.id },
          data: characterData
        })
      } else {
        await prisma.character.create({
          data: characterData
        })
      }
    } else if (online === false) {
      // Just mark characters offline
      await prisma.character.updateMany({
        where: {
          profile: {
            discordId,
            serverId: serverId || 'default'
          }
        },
        data: {
          isOnline: false,
          lastSeen: new Date()
        }
      })
    }

    return NextResponse.json({ success: true })
  } catch (error) {
    console.error('FiveM sync error:', error)
    return NextResponse.json({ error: 'Sync failed' }, { status: 500 })
  }
}
