"use client" import type React from "react" import { useState, useEffect } from "react" import { useRouter, useSearchParams } from "next/navigation" import { useAuth } from "@/contexts/auth-context" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { Badge } from "@/components/ui/badge" import { Alert, AlertDescription } from "@/components/ui/alert" import { Separator } from "@/components/ui/separator" import { Brain, User, Mail, Building, Lock, Loader2, CheckCircle, AlertTriangle, Shield, Code, Eye, EyeOff } from "lucide-react" export default function RegisterPage() { const router = useRouter() const searchParams = useSearchParams() const { register, isLoading } = useAuth() const [formData, setFormData] = useState({ name: "", email: "", password: "", confirmPassword: "", department: "", }) const [error, setError] = useState("") const [success, setSuccess] = useState("") const [isSubmitting, setIsSubmitting] = useState(false) const [showPassword, setShowPassword] = useState(false) const [showConfirmPassword, setShowConfirmPassword] = useState(false) // 從 URL 參數獲取邀請資訊 const invitationToken = searchParams.get("token") const invitedEmail = searchParams.get("email") const invitedRole = searchParams.get("role") || "user" const mode = searchParams.get("mode") // "reset" 表示密碼重設模式 const invitedName = searchParams.get("name") const invitedDepartment = searchParams.get("department") const isInvitedUser = !!(invitationToken && invitedEmail) const isResetMode = mode === "reset" // 在重設模式下,使用從資料庫獲取的正確角色 const displayRole = isResetMode ? invitedRole : invitedRole useEffect(() => { if (isInvitedUser) { setFormData((prev) => ({ ...prev, email: decodeURIComponent(invitedEmail), name: isResetMode && invitedName ? decodeURIComponent(invitedName) : prev.name, department: isResetMode && invitedDepartment ? decodeURIComponent(invitedDepartment) : prev.department, })) } }, [isInvitedUser, invitedEmail, isResetMode, invitedName, invitedDepartment]) const handleInputChange = (field: string, value: string) => { setFormData((prev) => ({ ...prev, [field]: value })) setError("") } const getRoleDescription = (role: string) => { switch (role) { case "admin": return "可以訪問管理後台,管理用戶和審核應用" case "developer": return "可以提交 AI 應用申請,參與平台建設" case "user": return "可以瀏覽和收藏應用,參與評價互動" default: return "" } } const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() setError("") setIsSubmitting(true) // 表單驗證 if (!formData.name || !formData.email || !formData.password || !formData.department) { setError("請填寫所有必填欄位") setIsSubmitting(false) return } if (formData.password !== formData.confirmPassword) { setError("密碼確認不一致") setIsSubmitting(false) return } if (formData.password.length < 6) { setError("密碼長度至少需要 6 個字符") setIsSubmitting(false) return } try { if (isResetMode) { // 密碼重設模式 const response = await fetch('/api/auth/reset-password', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ token: invitationToken, password: formData.password }), }) const data = await response.json() if (data.success) { setSuccess("密碼重設成功!正在跳轉...") setTimeout(() => { router.push("/") }, 2000) } else { setError(data.error || "密碼重設失敗") } } else { // 正常註冊模式 const success = await register({ name: formData.name, email: formData.email, password: formData.password, department: formData.department, }) if (success) { setSuccess("註冊成功!正在跳轉...") setTimeout(() => { router.push("/") }, 2000) } else { setError("註冊失敗,請檢查資料或聯繫管理員") } } } catch (err) { setError(isResetMode ? "密碼重設過程中發生錯誤,請稍後再試" : "註冊過程中發生錯誤,請稍後再試") } setIsSubmitting(false) } if (success) { return (
{isResetMode ? "您的密碼已成功重設" : "歡迎加入強茂集團 AI 展示平台"}
正在跳轉到首頁...
請設定您的新密碼
您已受邀加入平台,請完成以下資訊
加入強茂集團 AI 展示平台
開發者>
)}
{displayRole === "user" && (
<>已有帳戶?{" "}
可以瀏覽和收藏應用,參與評價互動
可以提交 AI 應用申請,參與平台建設
可以訪問管理後台,管理用戶和審核應用