/**
 * PATCH /api/user/active-role
 *
 * Switch user's active role (used by RoleSwitcher component)
 *
 * Request body:
 * {
 *   "roleCode": "educator"
 * }
 *
 * Response:
 * {
 *   "success": true,
 *   "activeRoleCode": "educator"
 * }
 *
 * Validates that user has the requested role before switching
 * Updates both session (immediate) and database (preference)
 */

import { z } from 'zod'
import { setUserActiveRole } from '../../utils/role-session'

const switchRoleSchema = z.object({
  roleCode: z.enum(['private', 'educator', 'company'], {
    errorMap: () => ({ message: 'Ungültige Rolle' }),
  }),
})

export default defineEventHandler(async (event) => {
  // Require authentication
  await requireUserSession(event)

  // Validate request body
  const body = await readBody(event)
  const { roleCode } = switchRoleSchema.parse(body)

  try {
    // Set active role (validates + updates session + saves to DB)
    await setUserActiveRole(event, roleCode)

    return {
      success: true,
      activeRoleCode: roleCode,
    }
  } catch (error: any) {
    // setUserActiveRole throws 403 if user doesn't have role
    if (error.statusCode === 403) {
      setResponseStatus(event, 403)
      return {
        success: false,
        message: error.message || 'Du hast diese Rolle nicht',
      }
    }

    // Other errors
    console.error('Role switch error:', error)
    setResponseStatus(event, 500)
    return {
      success: false,
      message: 'Fehler beim Wechseln der Rolle',
    }
  }
})
