import { Check, Loader2, BookOpen, Clock, ListChecks } from 'lucide-react' import { useState } from 'react' import type { IASugerencia } from '@/types/asignatura' import { Button } from '@/components/ui/button' import { useUpdateAsignatura, useSubject, useUpdateSubjectRecommendation, } from '@/data' import { cn } from '@/lib/utils' interface ImprovementCardProps { sug: IASugerencia asignaturaId: string onApplied: (campoKey: string) => void isSelected?: boolean } export function ImprovementCard({ sug, asignaturaId, onApplied, }: ImprovementCardProps) { const { data: asignatura } = useSubject(asignaturaId) const updateAsignatura = useUpdateAsignatura() const updateRecommendation = useUpdateSubjectRecommendation() const [isApplying, setIsApplying] = useState(false) const handleApply = async () => { if (!asignatura) return setIsApplying(true) try { // 1. Identificar a qué columna debe ir el guardado let patchData = {} if (sug.campoKey === 'contenido_tematico') { // Se guarda directamente en la columna contenido_tematico patchData = { contenido_tematico: sug.valorSugerido } } else if (sug.campoKey === 'criterios_de_evaluacion') { // Se guarda directamente en la columna criterios_de_evaluacion patchData = { criterios_de_evaluacion: sug.valorSugerido } } else { // Otros campos (ciclo, fines, etc.) se siguen guardando en el JSON de la columna 'datos' patchData = { datos: { ...asignatura.datos, [sug.campoKey]: sug.valorSugerido, }, } } // 2. Ejecutar la actualización con la estructura correcta await updateAsignatura.mutateAsync({ asignaturaId: asignaturaId as any, patch: patchData as any, }) // 3. Marcar la recomendación como aplicada await updateRecommendation.mutateAsync({ mensajeId: sug.messageId, campoAfectado: sug.campoKey, }) console.log(sug.campoKey) onApplied(sug.campoKey) } catch (error) { console.error('Error al aplicar mejora:', error) } finally { setIsApplying(false) } } // --- FUNCIÓN PARA RENDERIZAR EL CONTENIDO DE FORMA SEGURA --- const renderContenido = (valor: any) => { // Si no es un array, es texto simple if (!Array.isArray(valor)) { return
"{String(valor)}"
} // --- CASO 1: CONTENIDO TEMÁTICO (Detectamos si el primer objeto tiene 'unidad') --- if (valor[0]?.hasOwnProperty('unidad')) { return (
{/* JSON.stringify(valor, null, 2)*/ 'hola'}
)
}
// --- ESTADO APLICADO ---
if (sug.aceptada) {
return (