import { verifyToken, getUserById, hasAnyRole, readUsers, writeUsers } from '../../utils/auth.js'
import { readMembers, writeMembers } from '../../utils/members.js'

export default defineEventHandler(async (event) => {
  try {
    // Support both Cookie and Authorization Header
    let token = getCookie(event, 'auth_token')
    
    if (!token) {
      const authHeader = getHeader(event, 'authorization')
      if (authHeader && authHeader.startsWith('Bearer ')) {
        token = authHeader.substring(7)
      }
    }

    if (!token) {
      throw createError({
        statusCode: 401,
        message: 'Nicht authentifiziert.'
      })
    }

    const decoded = verifyToken(token)

    if (!decoded) {
      throw createError({
        statusCode: 401,
        message: 'Ungültiges Token.'
      })
    }

    const user = await getUserById(decoded.id)

    if (!user) {
      throw createError({
        statusCode: 401,
        message: 'Benutzer nicht gefunden.'
      })
    }

    // Only admin and vorstand can toggle this flag
    if (!hasAnyRole(user, 'admin', 'vorstand')) {
      throw createError({
        statusCode: 403,
        message: 'Keine Berechtigung.'
      })
    }

    const body = await readBody(event)
    const { memberId } = body

    if (!memberId) {
      throw createError({
        statusCode: 400,
        message: 'Mitglieds-ID ist erforderlich.'
      })
    }

    // Prüfe ob es ein Login-System-Mitglied ist (user.id === memberId)
    const users = await readUsers()
    const loginUser = users.find(u => u.id === memberId)

    if (loginUser) {
      // Login-System-Mitglied: Flag in users.json speichern
      loginUser.isMannschaftsspieler = !loginUser.isMannschaftsspieler
      await writeUsers(users)
      
      return {
        success: true,
        message: 'Mannschaftsspieler-Status aktualisiert.',
        isMannschaftsspieler: loginUser.isMannschaftsspieler
      }
    } else {
      // Manuelles Mitglied: Flag in members.json speichern
      const members = await readMembers()
      const member = members.find(m => m.id === memberId)
      
      if (!member) {
        throw createError({
          statusCode: 404,
          message: 'Mitglied nicht gefunden.'
        })
      }

      member.isMannschaftsspieler = !member.isMannschaftsspieler
      await writeMembers(members)
      
      return {
        success: true,
        message: 'Mannschaftsspieler-Status aktualisiert.',
        isMannschaftsspieler: member.isMannschaftsspieler
      }
    }
  } catch (error) {
    console.error('Fehler beim Umschalten des Mannschaftsspieler-Status:', error)
    if (error.statusCode) {
      throw error
    }
    throw createError({
      statusCode: error.statusCode || 500,
      message: error.message || 'Fehler beim Umschalten des Mannschaftsspieler-Status.'
    })
  }
})

