"use client"; import React, { useState } from "react"; import Link from "next/link"; import Cookies from "js-cookie"; import { useRouter } from "next/navigation"; import withReactContent from "sweetalert2-react-content"; import Swal from "sweetalert2"; import { Input } from "../ui/input"; import { Button } from "../ui/button"; import { Label } from "../ui/label"; import { RadioGroup, RadioGroupItem } from "../ui/radio-group"; import { requestOTP, createUser } from "@/service/auth"; export default function SignUp() { const router = useRouter(); const MySwal = withReactContent(Swal); const [step, setStep] = useState<"login" | "otp" | "form">("login"); const [role, setRole] = useState("umum"); const [email, setEmail] = useState(""); const [otp, setOtp] = useState(["", "", "", "", "", ""]); const [membershipType, setMembershipType] = useState(""); const [certNumber, setCertNumber] = useState(""); const [namaTenant, setNamaTenant] = useState(""); const [namaPerusahaan, setNamaPerusahaan] = useState(""); const [firstName, setFirstName] = useState(""); const [lastName, setLastName] = useState(""); const [fullname, setFullname] = useState(""); const [username, setUsername] = useState(""); const [phoneNumber, setPhoneNumber] = useState(""); const [address, setAddress] = useState(""); const [dateOfBirth, setDateOfBirth] = useState(""); const [genderType, setGenderType] = useState("male"); const [password, setPassword] = useState(""); const [workType, setWorkType] = useState(""); const handleSendOtp = async (e: React.FormEvent) => { e.preventDefault(); if (!email) { if (!email) { MySwal.fire({ icon: "error", title: "Error", text: "Email wajib diisi", }); return; } return; } let name = ""; if (role === "tenant") name = namaTenant || `${firstName} ${lastName}`; else if (role === "kontributor") name = namaPerusahaan || `${firstName} ${lastName}`; else if (role === "jurnalis") name = certNumber || "Jurnalis"; else name = fullname || email; try { const res = await requestOTP({ email, name }); if (!res?.error) { MySwal.fire({ icon: "success", title: "Sukses", text: "OTP berhasil dikirim ke email anda", }); setStep("otp"); } else { MySwal.fire({ icon: "error", title: "Gagal", text: res.message || "Gagal mengirim OTP", }); } } catch (err) { console.error("Error send otp:", err); MySwal.fire({ icon: "error", title: "Terjadi kesalahan server", text: "Gagal mengirim OTP", }); } }; const handleVerifyOtp = async (e: React.FormEvent) => { e.preventDefault(); const code = otp.join(""); if (code.length !== 6) { MySwal.fire({ icon: "error", title: "OTP harus 6 digit", text: "error", }); return; } MySwal.fire({ icon: "success", title: "Sukses", text: "OTP diverifikasi!", }); setStep("form"); }; const handleRegister = async (e: React.FormEvent) => { e.preventDefault(); const payload = { address, clientId: "78356d32-52fa-4dfc-b836-6cebf4e3eead", dateOfBirth, email, fullName: fullname, genderType, identityGroup: "", identityGroupNumber: "", identityNumber: "", identityType: "", lastEducation: "", password, phoneNumber, userLevelId: 1, userRoleId: 1, username, workType, }; try { const res = await createUser(payload); if (!res?.error) { MySwal.fire({ icon: "success", title: "Sukses", text: "Akun berhasil dibuat!", }); router.push("/auth"); } else { MySwal.fire({ icon: "error", title: "Gagal", text: res.message || "Gagal membuat akun", }); } } catch (err) { console.error("Register error:", err); MySwal.fire({ icon: "error", title: "Gagal", text: "Terjadi kesalahan server", }); } }; const handleOtpChange = (index: number, value: string) => { if (!/^[0-9]?$/.test(value)) return; const newOtp = [...otp]; newOtp[index] = value; setOtp(newOtp); const nextInput = document.getElementById(`otp-${index + 1}`); if (value && nextInput) nextInput.focus(); }; return (