import { readUsers, writeUsers, hashPassword } from '../../utils/auth.js'
import nodemailer from 'nodemailer'

export default defineEventHandler(async (event) => {
  try {
    const body = await readBody(event)
    const { name, email, phone, password } = body

    if (!name || !email || !password) {
      throw createError({
        statusCode: 400,
        message: 'Name, E-Mail und Passwort sind erforderlich'
      })
    }

    // Validate password length
    if (password.length < 8) {
      throw createError({
        statusCode: 400,
        message: 'Das Passwort muss mindestens 8 Zeichen lang sein'
      })
    }

    // Check if user already exists
    const users = await readUsers()
    const existingUser = users.find(u => u.email.toLowerCase() === email.toLowerCase())

    if (existingUser) {
      throw createError({
        statusCode: 409,
        message: 'Ein Benutzer mit dieser E-Mail-Adresse existiert bereits'
      })
    }

    // Hash password
    const hashedPassword = await hashPassword(password)

    // Create new user (inactive until approved)
    const newUser = {
      id: Date.now().toString(),
      email: email.toLowerCase(),
      password: hashedPassword,
      name,
      phone: phone || '',
      role: 'mitglied',
      active: false, // Requires admin approval
      created: new Date().toISOString(),
      lastLogin: null
    }

    users.push(newUser)
    await writeUsers(users)

    // Send notification email to admin
    try {
      const transporter = nodemailer.createTransport({
        host: process.env.SMTP_HOST || 'smtp.gmail.com',
        port: process.env.SMTP_PORT || 587,
        secure: false,
        auth: {
          user: process.env.SMTP_USER,
          pass: process.env.SMTP_PASS
        }
      })

      // Email to admin
      await transporter.sendMail({
        from: process.env.SMTP_FROM || 'noreply@harheimertc.de',
        to: process.env.SMTP_ADMIN || 'j.dichmann@gmx.de',
        subject: 'Neue Registrierung - Harheimer TC',
        html: `
          <h2>Neue Registrierung</h2>
          <p>Ein neuer Benutzer hat sich registriert und wartet auf Freigabe:</p>
          <ul>
            <li><strong>Name:</strong> ${name}</li>
            <li><strong>E-Mail:</strong> ${email}</li>
            <li><strong>Telefon:</strong> ${phone || 'Nicht angegeben'}</li>
          </ul>
          <p>Bitte prüfen Sie die Registrierung im CMS.</p>
        `
      })

      // Email to user
      await transporter.sendMail({
        from: process.env.SMTP_FROM || 'noreply@harheimertc.de',
        to: email,
        subject: 'Registrierung erhalten - Harheimer TC',
        html: `
          <h2>Registrierung erhalten</h2>
          <p>Hallo ${name},</p>
          <p>vielen Dank für Ihre Registrierung beim Harheimer TC!</p>
          <p>Ihre Anfrage wird vom Vorstand geprüft. Sie erhalten eine E-Mail, sobald Ihr Zugang freigeschaltet wurde.</p>
          <br>
          <p>Mit sportlichen Grüßen,<br>Ihr Harheimer TC</p>
        `
      })
    } catch (emailError) {
      console.error('E-Mail-Versand fehlgeschlagen:', emailError)
      // Continue anyway - user is registered
    }

    return {
      success: true,
      message: 'Registrierung erfolgreich. Sie erhalten eine E-Mail, sobald Ihr Zugang freigeschaltet wurde.'
    }
  } catch (error) {
    console.error('Registrierungs-Fehler:', error)
    throw error
  }
})

