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 (
{valor.map((u: any, idx: number) => (
Unidad {u.unidad}: {u.titulo}
))}
) } // --- CASO 2: CRITERIOS DE EVALUACIÓN (Detectamos si tiene 'criterio') --- if (valor[0]?.hasOwnProperty('criterio')) { return (
Desglose de evaluación
{valor.map((c: any, idx: number) => (
{c.criterio}
{c.porcentaje}%
))} {/* Opcional: Suma total para verificar que de 100% */}
Total:{' '} {valor.reduce( (acc: number, curr: any) => acc + (curr.porcentaje || 0), 0, )} %
) } // Caso por defecto (Array genérico) return (
        {/* JSON.stringify(valor, null, 2)*/ 'hola'}
      
) } // --- ESTADO APLICADO --- if (sug.aceptada) { return (
{sug.campoNombre}
Aplicado
{renderContenido(sug.valorSugerido)}
) } // --- ESTADO PENDIENTE --- return (
{sug.campoNombre}
{renderContenido(sug.valorSugerido)}
) }