import { useState, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import { supabase } from '@/lib/supabase'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { ArrowLeft, Sparkles } from 'lucide-react'; import { useSession } from '@/hooks/useSession'; import { useUppercasePreference } from '@/hooks/useUppercasePreference'; import { AdaptiveText, AdaptiveTitle, AdaptiveParagraph } from '@/components/ui/adaptive-text'; import { TextCaseToggle } from '@/components/ui/text-case-toggle'; import { cn } from '@/lib/utils'; interface EssayType { id: string; title: string; description: string; icon: string; } interface EssayGenre { id: string; title: string; description: string; icon: string; requirements: { min_words: number; max_words: number; required_elements: string[]; }; } export function NewEssay() { const navigate = useNavigate(); const [step, setStep] = useState<'type' | 'genre'>('type'); const [selectedType, setSelectedType] = useState(null); const [types, setTypes] = useState([]); const [genres, setGenres] = useState([]); const [loading, setLoading] = useState(true); const { session } = useSession(); const { isUpperCase, toggleUppercase, isLoading } = useUppercasePreference(session?.user?.id); useEffect(() => { loadTypes(); }, []); // Carregar tipos textuais async function loadTypes() { try { const { data, error } = await supabase .from('essay_types') .select('*') .eq('active', true); if (error) throw error; setTypes(data || []); } catch (error) { console.error('Erro ao carregar tipos:', error); } finally { setLoading(false); } } // Carregar gêneros do tipo selecionado async function loadGenres(typeId: string) { try { const { data, error } = await supabase .from('essay_genres') .select('*') .eq('type_id', typeId) .eq('active', true); if (error) throw error; setGenres(data || []); } catch (error) { console.error('Erro ao carregar gêneros:', error); } } // Criar nova redação async function createEssay(genreId: string) { try { const { data: { user } } = await supabase.auth.getUser(); if (!user) throw new Error('Usuário não autenticado'); const { data, error } = await supabase .from('student_essays') .insert({ student_id: user.id, type_id: selectedType!.id, genre_id: genreId, status: 'draft', title: 'Nova Redação', content: '' }) .select() .single(); if (error) throw error; navigate(`/aluno/redacoes/${data.id}`); } catch (error) { console.error('Erro ao criar redação:', error); } } // Renderizar seleção de tipo textual function renderTypeSelection() { return (
{types.map((type) => ( { setSelectedType(type); loadGenres(type.id); setStep('genre'); }} >
{type.icon}
))}
); } // Renderizar seleção de gênero textual function renderGenreSelection() { return (
{genres.map((genre) => ( createEssay(genre.id)} >
{genre.icon}

Requisitos

Mínimo: {genre.requirements?.min_words || 0} palavras

Máximo: {genre.requirements?.max_words || 'Sem limite'} palavras

{genre.requirements?.required_elements && genre.requirements.required_elements.length > 0 && ( <>

Elementos necessários:

    {genre.requirements.required_elements.map((element, index) => (
  • ))}
)}
))}
); } return (
{step === 'genre' && ( )} {loading ? (
) : step === 'type' ? ( renderTypeSelection() ) : ( renderGenreSelection() )}
); }