"use client"; import React, { useState } from "react"; import Image from "next/image"; import { X, Mail, Lock, User, ArrowRight, ShieldCheck, Check, Sparkles } from "lucide-react"; import { supabase } from "@/lib/supabase"; interface AuthModalProps { isOpen: boolean; onClose: () => void; onSuccess?: () => void; } export const AuthModal: React.FC = ({ isOpen, onClose, onSuccess }) => { const [isSignUp, setIsSignUp] = useState(true); const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); const [username, setUsername] = useState(""); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const [successMsg, setSuccessMsg] = useState(null); if (!isOpen) return null; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setLoading(true); setError(null); setSuccessMsg(null); try { if (isSignUp) { const { data, error: signUpErr } = await supabase.auth.signUp({ email, password, options: { data: { username: username || email.split("@")[0], }, }, }); if (signUpErr) throw signUpErr; setSuccessMsg(data.session ? "Account created and signed in!" : "Account created. Check your email to confirm."); setTimeout(() => { onClose(); if (onSuccess) onSuccess(); }, 1200); } else { const { data, error: signInErr } = await supabase.auth.signInWithPassword({ email, password, }); if (signInErr) throw signInErr; setSuccessMsg("Signed in successfully!"); setTimeout(() => { onClose(); if (onSuccess) onSuccess(); }, 1000); } } catch (err: any) { setError(err?.message || "Authentication error occurred"); } finally { setLoading(false); } }; return (
{/* Close Button */} {/* Header */}
Purcar Logo

{isSignUp ? "Create Your Purcar Account" : "Welcome Back to Purcar"}

{isSignUp ? "Get 5,000 free tokens daily & full API key access" : "Sign in to manage your reasoning quota & chats"}

{/* Form */}
{isSignUp && (
setUsername(e.target.value)} className="w-full pl-10 pr-4 py-2.5 rounded-xl bg-black/50 border border-white/10 text-white text-xs font-mono placeholder:text-zinc-600 focus:outline-none focus:border-white/30 transition-colors" />
)}
setEmail(e.target.value)} className="w-full pl-10 pr-4 py-2.5 rounded-xl bg-black/50 border border-white/10 text-white text-xs font-mono placeholder:text-zinc-600 focus:outline-none focus:border-white/30 transition-colors" />
setPassword(e.target.value)} className="w-full pl-10 pr-4 py-2.5 rounded-xl bg-black/50 border border-white/10 text-white text-xs font-mono placeholder:text-zinc-600 focus:outline-none focus:border-white/30 transition-colors" />
{error && (
{error}
)} {successMsg && (
{successMsg}
)}
{/* Footer switch */}
{isSignUp ? "Already have an account?" : "Don't have an account yet?"}
); };