import React, { useEffect, useState } from 'react'; import { useAuth } from '../context/AuthContext'; import { supabase, isSupabaseConfigured } from '../lib/supabaseClient'; import { Button } from './Button'; import { User, Save, AlertCircle, Calendar } from 'lucide-react'; export const ProfileCompleter: React.FC = () => { const { user, refreshDemoUser } = useAuth(); const [isOpen, setIsOpen] = useState(false); const [firstName, setFirstName] = useState(''); const [lastName, setLastName] = useState(''); const [dateOfBirth, setDateOfBirth] = useState(''); const [loading, setLoading] = useState(false); const [checking, setChecking] = useState(false); const [error, setError] = useState(null); useEffect(() => { if (!user) { setIsOpen(false); return; } const checkProfile = async () => { setChecking(true); // --- DEMO MODE --- if (!isSupabaseConfigured) { const meta = user.user_metadata || {}; if (!meta.first_name || !meta.last_name || !meta.date_of_birth) { setIsOpen(true); if (meta.first_name) setFirstName(meta.first_name); if (meta.last_name) setLastName(meta.last_name); if (meta.date_of_birth) setDateOfBirth(meta.date_of_birth); } setChecking(false); return; } // ----------------- try { const { data, error } = await supabase .from('profiles') .select('first_name, last_name, date_of_birth') .eq('id', user.id) .maybeSingle(); if (error) { console.error('Error checking profile:', error.message || error); // If DB check fails, fallback to metadata to see if we should block the user. // This prevents locking the user out if the DB is temporarily unavailable or misconfigured, // provided they have the data in their auth metadata. const meta = user.user_metadata || {}; const hasMetadata = meta.first_name && meta.last_name && meta.date_of_birth; if (!hasMetadata) { setIsOpen(true); if (meta.first_name) setFirstName(meta.first_name); if (meta.last_name) setLastName(meta.last_name); if (meta.date_of_birth) setDateOfBirth(meta.date_of_birth); } return; } // If no profile exists, or names/dob are missing if (!data || !data.first_name || !data.last_name || !data.date_of_birth) { setIsOpen(true); // Pre-fill if partial data exists if (data?.first_name) setFirstName(data.first_name); else if (user.user_metadata?.first_name) setFirstName(user.user_metadata.first_name); if (data?.last_name) setLastName(data.last_name); else if (user.user_metadata?.last_name) setLastName(user.user_metadata.last_name); if (data?.date_of_birth) setDateOfBirth(data.date_of_birth); else if (user.user_metadata?.date_of_birth) setDateOfBirth(user.user_metadata.date_of_birth); } } catch (err: any) { console.error('Unexpected error in ProfileCompleter:', err); } finally { setChecking(false); } }; checkProfile(); }, [user]); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(null); setLoading(true); if (!firstName.trim() || !lastName.trim() || !dateOfBirth) { setError('Minden mező kitöltése kötelező.'); setLoading(false); return; } try { // --- DEMO MODE UPDATE --- if (!isSupabaseConfigured && user) { await new Promise(resolve => setTimeout(resolve, 800)); // Fake delay // Update local storage session const storedSession = localStorage.getItem('demo_user_session'); if (storedSession) { const parsed = JSON.parse(storedSession); parsed.user.user_metadata = { ...parsed.user.user_metadata, first_name: firstName, last_name: lastName, date_of_birth: dateOfBirth }; localStorage.setItem('demo_user_session', JSON.stringify(parsed)); refreshDemoUser(); // Refresh context } setIsOpen(false); return; } // ------------------------ if (user) { // 1. Update Profile Table const { error: dbError } = await supabase .from('profiles') .upsert({ id: user.id, email: user.email, first_name: firstName, last_name: lastName, date_of_birth: dateOfBirth, updated_at: new Date().toISOString() }); if (dbError) throw dbError; // 2. Update Auth Metadata (optional, but good for consistency) await supabase.auth.updateUser({ data: { first_name: firstName, last_name: lastName, date_of_birth: dateOfBirth } }); setIsOpen(false); // We do not reload here to avoid infinite loops if checks fail on reload. // The state close is enough. } } catch (err: any) { console.error('Error updating profile:', err); setError('Hiba történt a mentés során: ' + (err.message || 'Ismeretlen hiba')); } finally { setLoading(false); } }; if (!isOpen) return null; return (

Hiányzó Adatok

Kérjük, a folytatáshoz adja meg a hiányzó adatait.

{error && (
{error}
)}
setLastName(e.target.value)} className="w-full px-4 py-3 rounded-lg border border-gray-300 focus:ring-2 focus:ring-primary focus:border-transparent outline-none transition-all bg-white text-gray-900" placeholder="Kovács" required />
setFirstName(e.target.value)} className="w-full px-4 py-3 rounded-lg border border-gray-300 focus:ring-2 focus:ring-primary focus:border-transparent outline-none transition-all bg-white text-gray-900" placeholder="János" required />
setDateOfBirth(e.target.value)} className="w-full px-4 py-3 rounded-lg border border-gray-300 focus:ring-2 focus:ring-primary focus:border-transparent outline-none transition-all bg-white text-gray-900" required />

Ezekre az adatokra a számlázáshoz és a kapcsolattartáshoz van szükségünk.

); };