import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query' import { useState } from 'react' import { Plus, Edit2, Trash2, Brain, Save, X, Activity, BookOpen } from 'lucide-react' import { api } from '../lib/api' interface Module { name: string description?: string program_patterns: string[] keywords: string[] rules: string[] restrictions: string[] } export default function Modules() { const queryClient = useQueryClient() const [editingModule, setEditingModule] = useState(null) const [isNew, setIsNew] = useState(false) const { data: modules, isLoading } = useQuery({ queryKey: ['modules'], queryFn: () => api.get('/api/config/modules').then(r => r.data), }) const saveMutation = useMutation({ mutationFn: (module: Module) => isNew ? api.post('/api/config/modules', module) : api.put(`/api/config/modules/${module.name}`, module), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['modules'] }) setEditingModule(null) setIsNew(false) }, }) const deleteMutation = useMutation({ mutationFn: (name: string) => api.delete(`/api/config/modules/${name}`), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['modules'] }) }, }) const modulesList: Module[] = modules || [] const handleNewModule = () => { setEditingModule({ name: '', description: '', program_patterns: [], keywords: [], rules: [], restrictions: [], }) setIsNew(true) } return (
{/* Header */}

Módulos de regras de negócio para contextualização da IA

{/* Modules List */} {isLoading ? (
) : modulesList.length === 0 && !editingModule ? (

Nenhum módulo configurado

Módulos definem regras de negócio específicas que a IA usa para entender o contexto do sistema

) : (
{modulesList.map(module => (

{module.name}

{module.description || 'Sem descrição'}

Padrões de programa:
{module.program_patterns.map(p => ( {p} ))} {module.program_patterns.length === 0 && -}
Keywords:
{module.keywords.slice(0, 5).map(k => ( {k} ))} {module.keywords.length > 5 && ( +{module.keywords.length - 5} )} {module.keywords.length === 0 && -}
))}
)} {/* Edit/Create Modal */} {editingModule && (

{isNew ? 'Novo Módulo' : `Editar: ${editingModule.name}`}

setEditingModule({ ...editingModule, name: e.target.value })} disabled={!isNew} placeholder="ACQ-Auth" className="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 disabled:bg-gray-100" />