<?php
// ============================================================
// MODELO: AtencionFormato
// Descripción: Gestiona múltiples formatos MSP por atención
// Fecha: 2026-01-13
// ============================================================

require_once __DIR__ . "/../config/Conexion.php";

class AtencionFormato
{
    public function __construct()
    {
    }

    // Insertar nuevo formato
    public function insertar($idatencion, $tipo_formato, $datos_json, $usuario_creacion = null, $orden = 0, $ruta_pdf = null)
    {
        $sql = "INSERT INTO atencion_formatos (
                    idatencion, 
                    tipo_formato, 
                    datos_json, 
                    usuario_creacion, 
                    orden,
                    estado,
                    ruta_pdf
                ) VALUES (
                    '$idatencion', 
                    '$tipo_formato', 
                    '$datos_json', 
                    " . ($usuario_creacion ? "'$usuario_creacion'" : "NULL") . ", 
                    '$orden',
                    'completado',
                    " . ($ruta_pdf ? "'$ruta_pdf'" : "NULL") . "
                )";

        $id_insertado = ejecutarConsulta_retornarID($sql);
        return $id_insertado;
    }

    // Editar formato existente
    public function editar($id_atencion_formato, $datos_json, $ruta_pdf = null)
    {
        $sql = "UPDATE atencion_formatos 
                SET datos_json = '$datos_json',
                    fecha_modificacion = NOW()";

        if ($ruta_pdf !== null) {
            $sql .= ", ruta_pdf = '$ruta_pdf'";
        }

        $sql .= " WHERE id_atencion_formato = '$id_atencion_formato'";

        return ejecutarConsulta($sql);
    }

    // Listar todos los formatos de una atención
    public function listar($idatencion)
    {
        $sql = "SELECT 
                    af.id_atencion_formato,
                    af.idatencion,
                    af.tipo_formato,
                    af.datos_json,
                    af.fecha_creacion,
                    af.fecha_modificacion,
                    af.orden,
                    af.estado,
                    -- RECUPERACIÓN MULTI-FUENTE DE RECETAS (FIX PÉRDIDA DE DOCUMENTOS)
                    -- Busca en 3 fuentes para garantizar recuperación: receta → documento_medico → atencion_formatos
                    CASE 
                        WHEN af.tipo_formato = 'RECETA' THEN 
                            COALESCE(
                                (SELECT ruta_pdf_firmado FROM receta WHERE idatencion = af.idatencion LIMIT 1),
                                (SELECT ruta_pdf_firmado FROM documento_medico WHERE idatencion = af.idatencion AND tipo='receta' LIMIT 1),
                                (SELECT ruta_pdf FROM documento_medico WHERE idatencion = af.idatencion AND tipo='receta' LIMIT 1),
                                af.ruta_pdf
                            )
                        ELSE af.ruta_pdf 
                    END as ruta_pdf
                FROM atencion_formatos af
                WHERE af.idatencion = '$idatencion'
                ORDER BY af.orden ASC, af.fecha_creacion ASC";

        return ejecutarConsulta($sql);
    }

    // Obtener un formato específico
    public function obtener($id_atencion_formato)
    {
        $sql = "SELECT 
                    af.id_atencion_formato,
                    af.idatencion,
                    af.tipo_formato,
                    af.datos_json,
                    af.fecha_creacion,
                    af.fecha_modificacion,
                    af.orden,
                    af.orden,
                    af.estado,
                    af.ruta_pdf
                FROM atencion_formatos af
                WHERE af.id_atencion_formato = '$id_atencion_formato'";

        return ejecutarConsultaSimpleFila($sql);
    }

    // Eliminar formato
    public function eliminar($id_atencion_formato)
    {
        $sql = "DELETE FROM atencion_formatos 
                WHERE id_atencion_formato = '$id_atencion_formato'";

        return ejecutarConsulta($sql);
    }

    // Contar formatos de una atención
    public function contar($idatencion)
    {
        $sql = "SELECT COUNT(*) as total 
                FROM atencion_formatos 
                WHERE idatencion = '$idatencion'";

        $result = ejecutarConsultaSimpleFila($sql);
        return $result['total'];
    }

    // Verificar si existe un tipo de formato para una atención
    public function existeFormato($idatencion, $tipo_formato)
    {
        $sql = "SELECT id_atencion_formato 
                FROM atencion_formatos 
                WHERE idatencion = '$idatencion' 
                AND tipo_formato = '$tipo_formato'
                LIMIT 1";

        $result = ejecutarConsultaSimpleFila($sql);
        return $result ? $result['id_atencion_formato'] : false;
    }

    // Actualizar orden de formatos
    public function actualizarOrden($id_atencion_formato, $nuevo_orden)
    {
        $sql = "UPDATE atencion_formatos 
                SET orden = '$nuevo_orden'
                WHERE id_atencion_formato = '$id_atencion_formato'";

        return ejecutarConsulta($sql);
    }

    // Actualizar ruta del PDF generado
    public function actualizarRutaPDF($id_atencion_formato, $ruta_pdf)
    {
        $sql = "UPDATE atencion_formatos 
                SET ruta_pdf = '$ruta_pdf'
                WHERE id_atencion_formato = '$id_atencion_formato'";

        return ejecutarConsulta($sql);
    }
}
