import React, { useState, useEffect } from 'react'; import { ArrowLeft, Sparkles } from 'lucide-react'; import { useNavigate } from 'react-router-dom'; import { StoryGenerator } from '../../components/story/StoryGenerator'; import { useSession } from '../../hooks/useSession'; import { TextCaseToggle } from '../../components/ui/text-case-toggle'; import { AdaptiveTitle, AdaptiveParagraph, AdaptiveText } from '../../components/ui/adaptive-text'; import { useUppercasePreference } from '../../hooks/useUppercasePreference'; import { useSpeechRecognition } from '@/features/voice-commands/hooks/useSpeechRecognition'; import { VoiceCommandButton } from '@/features/voice-commands/components/VoiceCommandButton'; import type { StoryChoices } from '@/components/story/StoryGenerator'; import { DEFAULT_LANGUAGE } from '@/types/language'; export function CreateStoryPage() { const navigate = useNavigate(); const { session } = useSession(); const [error, setError] = React.useState(null); const { transcript: voiceTranscript, start: startRecording, stop: stopRecording, status: recordingStatus, error: voiceError, isSupported: isVoiceSupported } = useSpeechRecognition(); const { isUpperCase, toggleUppercase, isLoading } = useUppercasePreference(session?.user?.id); const [inputMode, setInputMode] = useState<'voice' | 'form'>('form'); const [storyContext, setStoryContext] = useState(''); const [isGenerating, setIsGenerating] = useState(false); const [step, setStep] = useState(1); const [choices, setChoices] = useState({ theme_id: null, subject_id: null, character_id: null, setting_id: null, context: '', language_type: DEFAULT_LANGUAGE }); // Manipuladores para gravação de voz const handleStartRecording = () => { setError(null); startRecording(); }; const handleStopRecording = () => { stopRecording(); }; // Atualizar status da interface baseado no status da gravação useEffect(() => { if (recordingStatus === 'recording') { setInputMode('voice'); } }, [recordingStatus]); useEffect(() => { if (inputMode === 'voice' && voiceTranscript) { setStep(5); setInputMode('voice'); } }, [voiceTranscript, inputMode]); if (!session) { return (

Você precisa estar logado para criar histórias.

); } return (
{error && (
)} {voiceError && (
)}
{!isVoiceSupported && (
Seu navegador não suporta gravação por voz
)}
Modo atual: {inputMode === 'voice' ? 'Voz' : 'Formulário'}
{/*

Descreva sua história por voz

{ setInputMode('voice'); setStoryContext(transcript); }} onStart={handleStartRecording} onStop={handleStopRecording} disabled={isGenerating} className="w-full justify-center py-3" /> {voiceTranscript && (

{voiceTranscript}

)}
ou
*/} { if (inputMode === 'form') { setStoryContext(newContext); } }} inputMode={inputMode} voiceTranscript={voiceTranscript || ''} isGenerating={isGenerating} setIsGenerating={setIsGenerating} step={step} setStep={setStep} choices={choices} setChoices={setChoices} />

Como funciona?

    {[ 'Conte-nos sobre seus interesses e preferências', 'Escolha personagens e cenários para sua história', 'Nossa IA criará uma história única e personalizada', 'Você poderá ler e praticar com sua nova história' ].map((text, index) => ( ))}
); }