'use client'

import { useState } from 'react'
import { createAuthClient } from 'better-auth/react'

const authClient = createAuthClient({
  baseURL: typeof window !== 'undefined'
    ? window.location.origin
    : (process.env.NEXT_PUBLIC_APP_URL ?? 'http://localhost:3010'),
})

export default function PasswortAendernPage() {
  const [oldPassword, setOldPassword] = useState('')
  const [newPassword, setNewPassword] = useState('')
  const [confirmPassword, setConfirmPassword] = useState('')
  const [loading, setLoading] = useState(false)
  const [error, setError] = useState('')

  async function handleSubmit(e: React.FormEvent) {
    e.preventDefault()
    setError('')

    if (newPassword !== confirmPassword) {
      setError('Die neuen Passwörter stimmen nicht überein.')
      return
    }
    if (newPassword.length < 8) {
      setError('Das neue Passwort muss mindestens 8 Zeichen haben.')
      return
    }
    if (newPassword === oldPassword) {
      setError('Das neue Passwort muss sich vom alten unterscheiden.')
      return
    }

    setLoading(true)

    const result = await authClient.changePassword({
      currentPassword: oldPassword,
      newPassword,
      revokeOtherSessions: false,
    })

    if (result.error) {
      setLoading(false)
      setError(result.error.message ?? 'Das alte Passwort ist falsch.')
      return
    }

    // Mark mustChangePassword as done
    await fetch('/api/auth/clear-must-change-password', { method: 'POST' })

    window.location.href = '/dashboard'
  }

  return (
    <div className="min-h-screen overflow-y-auto bg-gray-50 flex items-center justify-center p-4">
      <div className="w-full max-w-sm">
        <div className="bg-white rounded-lg border p-8">
          <div className="mb-6">
            <h1 className="text-xl font-semibold text-gray-900">Passwort ändern</h1>
            <p className="text-sm text-gray-500 mt-1">
              Bitte legen Sie jetzt Ihr persönliches Passwort fest.
            </p>
          </div>

          <div className="mb-4 bg-amber-50 border border-amber-200 rounded-lg px-3 py-2 text-sm text-amber-800">
            Aus Sicherheitsgründen müssen Sie das temporäre Passwort durch ein eigenes ersetzen.
          </div>

          <form onSubmit={handleSubmit} className="space-y-4">
            <div>
              <label htmlFor="oldPassword" className="block text-xs font-medium text-gray-600 mb-1 uppercase tracking-wide">
                Temporäres Passwort (aus der Einladung)
              </label>
              <input
                id="oldPassword"
                type="password"
                required
                value={oldPassword}
                onChange={(e) => setOldPassword(e.target.value)}
                placeholder="Temporäres Passwort"
                className="w-full px-3 py-2.5 border border-gray-200 rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-brand-500 focus:border-transparent"
              />
            </div>

            <div>
              <label htmlFor="newPassword" className="block text-xs font-medium text-gray-600 mb-1 uppercase tracking-wide">
                Neues Passwort
              </label>
              <input
                id="newPassword"
                type="password"
                required
                value={newPassword}
                onChange={(e) => setNewPassword(e.target.value)}
                placeholder="Mindestens 8 Zeichen"
                className="w-full px-3 py-2.5 border border-gray-200 rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-brand-500 focus:border-transparent"
              />
            </div>

            <div>
              <label htmlFor="confirmPassword" className="block text-xs font-medium text-gray-600 mb-1 uppercase tracking-wide">
                Neues Passwort bestätigen
              </label>
              <input
                id="confirmPassword"
                type="password"
                required
                value={confirmPassword}
                onChange={(e) => setConfirmPassword(e.target.value)}
                placeholder="Passwort wiederholen"
                className="w-full px-3 py-2.5 border border-gray-200 rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-brand-500 focus:border-transparent"
              />
            </div>

            {error && (
              <p className="text-sm text-red-600 bg-red-50 px-3 py-2 rounded-lg">{error}</p>
            )}

            <button
              type="submit"
              disabled={loading}
              className="w-full bg-brand-500 text-white py-2.5 px-4 rounded-lg text-sm font-medium disabled:opacity-60 disabled:cursor-not-allowed transition-colors hover:bg-brand-600"
            >
              {loading ? 'Bitte warten...' : 'Passwort festlegen'}
            </button>
          </form>
        </div>
      </div>
    </div>
  )
}
