"use client"; import { useState } from "react"; import { useRouter } from "next/navigation"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { LanguageSelect } from "@/components/LanguageSelect"; import { ThemeSelect } from "@/components/ThemeSelect"; import { companyInfoSchema, userInfoSchema, planSelectionSchema } from "@/lib/validations/auth"; import { ArrowLeft, Building2, User, Mail, Phone, Lock, Briefcase, Users, FileText } from "lucide-react"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; export function SignupPage() { const router = useRouter(); const [step, setStep] = useState(1); const [formData, setFormData] = useState({ // 회사 정보 companyName: "", businessNumber: "", industry: "", companySize: "", // 담당자 정보 name: "", position: "", email: "", phone: "", userId: "", password: "", passwordConfirm: "", // 플랜 및 추천인 plan: "demo", salesCode: "", // 약관 agreeTerms: false, agreePrivacy: false, }); const handleInputChange = (field: string, value: string | boolean) => { setFormData(prev => ({ ...prev, [field]: value })); }; const handleSubmit = () => { // 회원가입 처리 (실제로는 API 호출) const userData = { ...formData, role: "CEO", // 기본 역할 }; // Save user data to localStorage (client-side only) if (typeof window !== "undefined") { localStorage.setItem("user", JSON.stringify(userData)); } // Navigate to dashboard router.push("/dashboard"); }; const [stepErrors, setStepErrors] = useState<{ [key: string]: string }>({}); const validateStep1 = () => { const result = companyInfoSchema.safeParse({ companyName: formData.companyName, businessNumber: formData.businessNumber, industry: formData.industry, companySize: formData.companySize, }); if (!result.success) { const firstError = result.error.issues[0]; setStepErrors({ step1: firstError.message }); return false; } setStepErrors({}); return true; }; const validateStep2 = () => { const result = userInfoSchema.safeParse({ name: formData.name, position: formData.position, email: formData.email, phone: formData.phone, userId: formData.userId, password: formData.password, passwordConfirm: formData.passwordConfirm, }); if (!result.success) { const firstError = result.error.issues[0]; setStepErrors({ step2: firstError.message }); return false; } setStepErrors({}); return true; }; const validateStep3 = () => { const result = planSelectionSchema.safeParse({ plan: formData.plan, salesCode: formData.salesCode, agreeTerms: formData.agreeTerms, agreePrivacy: formData.agreePrivacy, }); if (!result.success) { const firstError = result.error.issues[0]; setStepErrors({ step3: firstError.message }); return false; } setStepErrors({}); return true; }; const isStep1Valid = formData.companyName && formData.businessNumber && formData.industry && formData.companySize; const isStep2Valid = formData.name && formData.email && formData.phone && formData.userId && formData.password && formData.password === formData.passwordConfirm; const isStep3Valid = formData.agreeTerms && formData.agreePrivacy; return (
{/* Header */}
{/* Main Content */}
{/* Progress Steps */}
{[1, 2, 3].map((stepNumber) => (
{(stepNumber === 2 || stepNumber === 3) && (
stepNumber - 1 ? "bg-primary" : "bg-muted" }`} /> )}
= stepNumber ? "bg-primary text-white" : "bg-muted text-muted-foreground" }`}> {stepNumber}
{(stepNumber === 1 || stepNumber === 2) && (
stepNumber ? "bg-primary" : "bg-muted" }`} /> )}
))}
= 1 ? "text-foreground font-medium" : "text-muted-foreground"}> 회사 정보 = 2 ? "text-foreground font-medium" : "text-muted-foreground"}> 담당자 정보 = 3 ? "text-foreground font-medium" : "text-muted-foreground"}> 플랜 선택
{/* Step 1: 회사 정보 */} {step === 1 && (

회사 정보를 입력해주세요

MES 시스템을 도입할 회사의 기본 정보를 알려주세요

handleInputChange("companyName", e.target.value)} className="clean-input" />
handleInputChange("businessNumber", e.target.value)} className="clean-input" />
{stepErrors.step1 && (

{stepErrors.step1}

)}
)} {/* Step 2: 담당자 정보 */} {step === 2 && (

담당자 정보를 입력해주세요

시스템 관리자 계정으로 사용될 정보입니다

handleInputChange("name", e.target.value)} className="clean-input" />
handleInputChange("position", e.target.value)} className="clean-input" />
handleInputChange("email", e.target.value)} className="clean-input" />
handleInputChange("phone", e.target.value)} className="clean-input" />
handleInputChange("userId", e.target.value)} className="clean-input" />
handleInputChange("password", e.target.value)} className="clean-input" />
handleInputChange("passwordConfirm", e.target.value)} className="clean-input" /> {formData.passwordConfirm && formData.password !== formData.passwordConfirm && (

비밀번호가 일치하지 않습니다

)}
{stepErrors.step2 && (

{stepErrors.step2}

)}
)} {/* Step 3: 플랜 선택 */} {step === 3 && (
{/*

플랜을 선택해주세요

먼저 30일 무료 체험으로 시작해보세요

{[ { id: "demo", name: "데모 체험판", desc: "30일 무료 체험 (모든 기능 이용)", badge: "추천" }, { id: "standard", name: "스탠다드", desc: "중소기업 최적화 플랜" }, { id: "premium", name: "프리미엄", desc: "중견기업 맞춤형 플랜" }, ].map((plan) => ( ))}
handleSalesCodeChange(e.target.value)} className={`clean-input pr-10 ${ salesCodeValid === true ? "border-green-500" : salesCodeValid === false ? "border-destructive" : "" }`} /> {salesCodeValid === true && ( )}
{salesCodeValid === true && (

유효한 코드입니다! {discount}% 할인이 적용됩니다

)} {salesCodeValid === false && (

유효하지 않은 코드입니다

)}

💡 예시 코드: SALES2024 (20%), PARTNER30 (30%), VIP50 (50%)

*/}
)} {/* Login Link */}

이미 계정이 있으신가요?{" "}

); }