import { getUserFromToken, readUsers, writeUsers, hasAnyRole, migrateUserRoles } from '../../../utils/auth.js'
import nodemailer from 'nodemailer'
import { writeAuditLog } from '../../../utils/audit-log.js'

export default defineEventHandler(async (event) => {
  try {
    const token = getCookie(event, 'auth_token')
    const currentUser = await getUserFromToken(token)

    if (!currentUser || !hasAnyRole(currentUser, 'admin')) {
      throw createError({
        statusCode: 403,
        message: 'Zugriff verweigert'
      })
    }

    const body = await readBody(event)
    const { userId, roles } = body

    const users = await readUsers()
    const user = users.find(u => u.id === userId)

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

    // Migriere Benutzer falls nötig
    migrateUserRoles(user)

    // Activate user and set roles
    user.active = true
    if (Array.isArray(roles) && roles.length > 0) {
      user.roles = roles
    } else {
      // Fallback: einzelne Rolle als Array
      user.roles = roles ? [roles] : ['mitglied']
    }
    
    const updatedUsers = users.map(u => u.id === userId ? user : u)
    await writeUsers(updatedUsers)

    await writeAuditLog('cms.user.approved', {
      actorUserId: currentUser.id,
      targetUserId: userId,
      roles: user.roles
    })

    // Send approval email
    try {
      const smtpUser = process.env.SMTP_USER
      const smtpPass = process.env.SMTP_PASS
      
      if (!smtpUser || !smtpPass) {
        console.warn('SMTP-Credentials fehlen! E-Mail-Versand wird übersprungen.')
        console.warn(`SMTP_USER=${smtpUser ? 'gesetzt' : 'FEHLT'}, SMTP_PASS=${smtpPass ? 'gesetzt' : 'FEHLT'}`)
        // Continue without sending email
      } else {
        const transporter = nodemailer.createTransport({
          host: process.env.SMTP_HOST || 'smtp.gmail.com',
          port: process.env.SMTP_PORT || 587,
          secure: false,
          auth: {
            user: smtpUser,
            pass: smtpPass
          }
        })

        await transporter.sendMail({
          from: process.env.SMTP_FROM || 'noreply@harheimertc.de',
          to: user.email,
          subject: 'Zugang freigeschaltet - Harheimer TC',
          html: `
            <h2>Zugang freigeschaltet</h2>
            <p>Hallo ${user.name},</p>
            <p>Ihr Zugang zum Mitgliederbereich wurde freigeschaltet!</p>
            <p>Sie können sich jetzt mit Ihrer E-Mail-Adresse und Ihrem Passwort anmelden.</p>
            <p><a href="https://harheimertc.tsschulz.de/login">Zum Login</a></p>
            <br>
            <p>Mit sportlichen Grüßen,<br>Ihr Harheimer TC</p>
          `
        })
      }
    } catch (emailError) {
      console.error('E-Mail-Versand fehlgeschlagen:', emailError)
    }

    return {
      success: true,
      message: 'Benutzer wurde freigeschaltet'
    }
  } catch (error) {
    console.error('Fehler beim Freischalten:', error)
    throw error
  }
})

