import React, { createContext, useContext, useState, useEffect } from "react"; import { areasService, type AreaItem } from "@/services/areas"; import { toast } from "sonner"; export const DEFAULT_AREAS = [ "Bate-papo", "Imagens", "Transcrição de Áudio", "Geração de Áudio", "Agente de Parecer", "Outro", ]; export interface Prompt { id: string; titulo: string; area: string; area_id?: string; descricao?: string; conteudo?: string; } export type AreaDescriptions = Record; export type AreaIdByNome = Record; interface PromptsContextValue { prompts: Prompt[]; setPrompts: React.Dispatch>; areas: string[]; setAreas: React.Dispatch>; areaDescriptions: AreaDescriptions; setAreaDescriptions: React.Dispatch>; areaItems: AreaItem[]; areaIdByNome: AreaIdByNome; areasLoading: boolean; areasError: string | null; } const PromptsContext = createContext(null); export function PromptsProvider({ children }: { children: React.ReactNode }) { const [prompts, setPrompts] = useState([]); const [areas, setAreas] = useState(() => [...DEFAULT_AREAS]); const [areaDescriptions, setAreaDescriptions] = useState({}); const [areaItems, setAreaItems] = useState([]); const [areaIdByNome, setAreaIdByNome] = useState({}); const [areasLoading, setAreasLoading] = useState(true); const [areasError, setAreasError] = useState(null); useEffect(() => { setAreasLoading(true); setAreasError(null); areasService.listarTotal() .then((data) => { const nomes = data.map((a) => a.nome).sort((a, b) => a.localeCompare(b)); const descricoes = Object.fromEntries(data.map((a) => [a.nome, a.descricao ?? ""])); const byNome = Object.fromEntries(data.map((a) => [a.nome, a.id])); setAreas(nomes.length > 0 ? nomes : [...DEFAULT_AREAS]); setAreaDescriptions(descricoes); setAreaItems(data); setAreaIdByNome(byNome); }) .catch((err) => { const message = err?.message ?? "Erro ao carregar áreas"; console.error("[PromptsContext] areasService.listarTotal falhou:", err); setAreasError(message); toast.error("Não foi possível carregar as áreas. Verifique a conexão e a chave da API."); }) .finally(() => setAreasLoading(false)); }, []); return ( {children} ); } export function usePrompts() { const ctx = useContext(PromptsContext); if (!ctx) throw new Error("usePrompts must be used within PromptsProvider"); return ctx; }