'use client'; import { useEffect, useState } from 'react'; import { createClient } from '@/lib/supabase/client'; import { MessageTemplate } from '@/types'; import { Button } from '@/components/ui/button'; import { Loader2, FileText, ArrowRight } from 'lucide-react'; import { useTranslations } from 'next-intl'; const categoryColors: Record = { Marketing: 'bg-purple-500/10 text-purple-400 border-purple-500/20', Utility: 'bg-blue-500/10 text-blue-400 border-blue-500/20', Authentication: 'bg-orange-500/10 text-orange-400 border-orange-500/20', }; interface Step1Props { selectedTemplate: MessageTemplate | null; onSelect: (template: MessageTemplate) => void; onNext: () => void; onBack: () => void; } export function Step1ChooseTemplate({ selectedTemplate, onSelect, onNext, onBack }: Step1Props) { const t = useTranslations('Broadcasts.wizard'); const [templates, setTemplates] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { async function fetchTemplates() { try { const supabase = createClient(); // Only APPROVED templates can be sent via Meta — anything else // would 400 at broadcast time. Hide them rather than letting // the user pick a template that will fail. const { data, error: fetchError } = await supabase .from('message_templates') .select('*') .eq('status', 'APPROVED') .order('created_at', { ascending: false }); if (fetchError) throw fetchError; setTemplates(data ?? []); } catch (err) { setError(err instanceof Error ? err.message : t('chooseTemplate.errorLoad')); } finally { setLoading(false); } } fetchTemplates(); }, []); if (loading) { return (
); } if (error) { return (

{error}

); } return (

{t('chooseTemplate.title')}

{t('chooseTemplate.subtitle')}

{templates.length === 0 ? (

{t('chooseTemplate.noTemplates')}

{t('chooseTemplate.createFirst')}

) : (
{templates.map((template) => { const isSelected = selectedTemplate?.id === template.id; const catColor = categoryColors[template.category] ?? categoryColors.Utility; return ( ); })}
)}
); }