import { NextRequest, NextResponse } from 'next/server'
import { getSession } from '@/lib/auth'
import { queryJobPanelDb, initializeJobPanelDatabase } from '@/lib/job-panel-db'
import { v4 as uuidv4 } from 'uuid'
import type { RowDataPacket } from 'mysql2'

// GET - Get panel members
export async function GET(
  request: NextRequest,
  { params }: { params: Promise<{ id: string }> }
) {
  try {
    const session = await getSession()
    if (!session) {
      return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })
    }

    const { id } = await params

    await initializeJobPanelDatabase()

    const members = await queryJobPanelDb<RowDataPacket[]>(
      'SELECT * FROM job_panel_members WHERE panel_id = ? ORDER BY role, assigned_at',
      [id]
    )

    return NextResponse.json({
      members: members.map(m => ({
        id: m.id,
        visibleIdentifier: m.visible_identifier,
        username: m.username,
        visibleGrade: m.visible_grade,
        visibleGradeName: m.visible_grade_name,
        role: m.role,
        assignedAt: m.assigned_at,
      })),
    })
  } catch (error) {
    console.error('[JobPanels:Members] GET error:', error)
    return NextResponse.json({ error: 'Failed to fetch members' }, { status: 500 })
  }
}

// POST - Add panel member (job leader) from game employee data
export async function POST(
  request: NextRequest,
  { params }: { params: Promise<{ id: string }> }
) {
  try {
    const session = await getSession()
    if (!session || session.role !== 'SUPERADMIN') {
      return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })
    }

    const { id } = await params
    const body = await request.json()
    const { visibleIdentifier, visibleName, visibleGrade, visibleGradeName, ucpUserId, role = 'LEADER' } = body

    if (!visibleIdentifier || !visibleName) {
      return NextResponse.json({ error: 'visibleIdentifier and visibleName are required' }, { status: 400 })
    }

    await initializeJobPanelDatabase()

    // Check if already a member (by visible_identifier)
    const existing = await queryJobPanelDb<RowDataPacket[]>(
      'SELECT id FROM job_panel_members WHERE panel_id = ? AND visible_identifier = ?',
      [id, visibleIdentifier]
    )

    if (existing.length > 0) {
      return NextResponse.json({ error: 'Dieser Mitarbeiter ist bereits Panel-Leiter' }, { status: 400 })
    }

    // Add member with game employee data and UCP link
    const memberId = uuidv4()
    await queryJobPanelDb(
      `INSERT INTO job_panel_members (id, panel_id, visible_identifier, username, visible_grade, visible_grade_name, ucp_user_id, role, assigned_by)
       VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,
      [memberId, id, visibleIdentifier, visibleName, visibleGrade || 0, visibleGradeName || '', ucpUserId || null, role, session.userId]
    )

    return NextResponse.json({ 
      success: true, 
      message: 'Leiter erfolgreich hinzugefuegt',
      member: {
        id: memberId,
        visibleIdentifier,
        username: visibleName,
        visibleGrade,
        visibleGradeName,
        ucpUserId,
        role
      }
    })
  } catch (error) {
    console.error('[JobPanels:Members] POST error:', error)
    return NextResponse.json({ error: 'Failed to add member' }, { status: 500 })
  }
}

// PUT - Update member role
export async function PUT(
  request: NextRequest,
  { params }: { params: Promise<{ id: string }> }
) {
  try {
    const session = await getSession()
    if (!session || session.role !== 'SUPERADMIN') {
      return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })
    }

    const { id } = await params
    const body = await request.json()
    const { memberId, role } = body

    if (!memberId || !role) {
      return NextResponse.json({ error: 'Member ID and role are required' }, { status: 400 })
    }

    await queryJobPanelDb(
      'UPDATE job_panel_members SET role = ? WHERE id = ? AND panel_id = ?',
      [role, memberId, id]
    )

    return NextResponse.json({ success: true, message: 'Member role updated' })
  } catch (error) {
    console.error('[JobPanels:Members] PUT error:', error)
    return NextResponse.json({ error: 'Failed to update member' }, { status: 500 })
  }
}

// DELETE - Remove member
export async function DELETE(
  request: NextRequest,
  { params }: { params: Promise<{ id: string }> }
) {
  try {
    const session = await getSession()
    if (!session || session.role !== 'SUPERADMIN') {
      return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })
    }

    const { id } = await params
    const { searchParams } = new URL(request.url)
    const memberId = searchParams.get('memberId')

    if (!memberId) {
      return NextResponse.json({ error: 'Member ID is required' }, { status: 400 })
    }

    await initializeJobPanelDatabase()

    await queryJobPanelDb(
      'DELETE FROM job_panel_members WHERE id = ? AND panel_id = ?',
      [memberId, id]
    )

    return NextResponse.json({ success: true, message: 'Member removed' })
  } catch (error) {
    console.error('[JobPanels:Members] DELETE error:', error)
    return NextResponse.json({ error: 'Failed to remove member' }, { status: 500 })
  }
}
