"use client"; import { useState, useEffect } from "react"; import { useRouter, useSearchParams } from "next/navigation"; import Link from "next/link"; import { fetchClient } from "@/lib/api-client"; import { toast } from "sonner"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Loader2 } from "lucide-react"; interface Vendor { id: string; username: string; } export default function ResetPasswordPage() { const router = useRouter(); const searchParams = useSearchParams(); const token = searchParams.get('token'); const [vendor, setVendor] = useState(null); const [loading, setLoading] = useState(true); const [submitting, setSubmitting] = useState(false); const [password, setPassword] = useState(""); const [confirmPassword, setConfirmPassword] = useState(""); useEffect(() => { if (!token) { toast.error("No reset token provided"); router.push("/auth/login"); return; } validateToken(); }, [token]); async function validateToken() { try { const data = await fetchClient<{ valid: boolean; vendor?: Vendor; message?: string }>(`/auth/validate-reset-token/${token}`); if (data.valid && data.vendor) { setVendor(data.vendor); } else { toast.error(data.message || "Invalid or expired token"); router.push("/auth/login"); } } catch (error: any) { toast.error("Failed to validate token"); router.push("/auth/login"); } finally { setLoading(false); } } async function handleSubmit(e: React.FormEvent) { e.preventDefault(); if (password !== confirmPassword) { toast.error("Passwords do not match"); return; } if (password.length < 6) { toast.error("Password must be at least 6 characters"); return; } setSubmitting(true); try { await fetchClient("/auth/reset-password", { method: "POST", body: { token, newPassword: password } }); toast.success("Password reset successfully"); router.push("/auth/login"); } catch (error: any) { toast.error(error?.message || "Failed to reset password"); } finally { setSubmitting(false); } } if (loading) { return (

Validating token...

); } if (!vendor) { return null; // Will redirect } return (

Reset Password

Reset password for {vendor.username}

setPassword(e.target.value)} className="mt-1" disabled={submitting} placeholder="Enter new password" />
setConfirmPassword(e.target.value)} className="mt-1" disabled={submitting} placeholder="Confirm new password" />

Remember your password?{" "} Sign in

); }