import { Plus, Search, BookOpen, Trash2, Library, Edit3, Save, } from 'lucide-react' import { useEffect, useState } from 'react' import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from '@/components/ui/alert-dialog' import { Badge } from '@/components/ui/badge' import { Button } from '@/components/ui/button' import { Card, CardContent } from '@/components/ui/card' import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger, } from '@/components/ui/dialog' import { Input } from '@/components/ui/input' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select' import { Textarea } from '@/components/ui/textarea' import { useSubjectBibliografia } from '@/data/hooks/useSubjects' import { cn } from '@/lib/utils' // import { toast } from 'sonner'; // import { mockLibraryResources } from '@/data/mockAsignaturaData'; export const mockLibraryResources = [ { id: 'lib-1', titulo: 'Deep Learning', autor: 'Goodfellow, I., Bengio, Y., & Courville, A.', editorial: 'MIT Press', anio: 2016, isbn: '9780262035613', disponible: true, }, { id: 'lib-2', titulo: 'Artificial Intelligence: A Modern Approach', autor: 'Russell, S., & Norvig, P.', editorial: 'Pearson', anio: 2020, isbn: '9780134610993', disponible: true, }, { id: 'lib-3', titulo: 'Hands-On Machine Learning', autor: 'Aurélien Géron', editorial: "O'Reilly Media", anio: 2019, isbn: '9781492032649', disponible: false, }, ] // --- Interfaces --- export interface BibliografiaEntry { id: string tipo: 'BASICA' | 'COMPLEMENTARIA' cita: string tipo_fuente?: 'MANUAL' | 'BIBLIOTECA' biblioteca_item_id?: string | null fuenteBibliotecaId?: string fuenteBiblioteca?: any } interface BibliografiaTabProps { id: string bibliografia: Array onSave: (bibliografia: Array) => void isSaving: boolean } export function BibliographyItem({ bibliografia, id, onSave, isSaving, }: BibliografiaTabProps) { console.log(id) const { data: bibliografia2, isLoading: loadinasignatura } = useSubjectBibliografia(id) const [entries, setEntries] = useState>(bibliografia) const [isAddDialogOpen, setIsAddDialogOpen] = useState(false) const [isLibraryDialogOpen, setIsLibraryDialogOpen] = useState(false) const [deleteId, setDeleteId] = useState(null) const [editingId, setEditingId] = useState(null) const [newEntryType, setNewEntryType] = useState<'BASICA' | 'COMPLEMENTARIA'>( 'BASICA', ) useEffect(() => { if (bibliografia2 && Array.isArray(bibliografia2)) { setEntries(bibliografia2) } else if (bibliografia) { // Fallback a la prop inicial si la API no devuelve nada setEntries(bibliografia) } }, [bibliografia2, bibliografia]) const basicaEntries = entries.filter((e) => e.tipo === 'BASICA') const complementariaEntries = entries.filter( (e) => e.tipo === 'COMPLEMENTARIA', ) console.log(bibliografia2) const handleAddManual = (cita: string) => { const newEntry: BibliografiaEntry = { id: `manual-${Date.now()}`, tipo: newEntryType, cita, } setEntries([...entries, newEntry]) setIsAddDialogOpen(false) // toast.success('Referencia manual añadida'); } const handleAddFromLibrary = ( resource: any, tipo: 'BASICA' | 'COMPLEMENTARIA', ) => { const cita = `${resource.autor} (${resource.anio}). ${resource.titulo}. ${resource.editorial}.` const newEntry: BibliografiaEntry = { id: `lib-ref-${Date.now()}`, tipo, cita, fuenteBibliotecaId: resource.id, fuenteBiblioteca: resource, } setEntries([...entries, newEntry]) setIsLibraryDialogOpen(false) // toast.success('Añadido desde biblioteca'); } const handleUpdateCita = (id: string, cita: string) => { setEntries(entries.map((e) => (e.id === id ? { ...e, cita } : e))) } return (

Bibliografía

{basicaEntries.length} básica • {complementariaEntries.length}{' '} complementaria

e.fuenteBibliotecaId || '')} />
{/* BASICA */}

Bibliografía Básica

{basicaEntries.map((entry) => ( setEditingId(entry.id)} onStopEditing={() => setEditingId(null)} onUpdateCita={handleUpdateCita} onDelete={() => setDeleteId(entry.id)} /> ))}
{/* COMPLEMENTARIA */}

Bibliografía Complementaria

{complementariaEntries.map((entry) => ( setEditingId(entry.id)} onStopEditing={() => setEditingId(null)} onUpdateCita={handleUpdateCita} onDelete={() => setDeleteId(entry.id)} /> ))}
setDeleteId(null)}> ¿Eliminar referencia? La referencia será quitada del plan de estudios. Cancelar { setEntries(entries.filter((e) => e.id !== deleteId)) setDeleteId(null) }} className="bg-red-600" > Eliminar
) } // --- Subcomponentes --- function BibliografiaCard({ entry, isEditing, onEdit, onStopEditing, onUpdateCita, onDelete, }: any) { const [localCita, setLocalCita] = useState(entry.cita) return (
{isEditing ? (