<?php
require_once "../config/Conexion.php";

// Endpoint exclusivo para subir archivos adjuntos
// No interfiere con ningún otro proceso del sistema

$idatencion = isset($_POST['idatencion']) ? limpiarCadena($_POST['idatencion']) : '';

if (empty($idatencion)) {
    echo json_encode(["status" => "error", "message" => "No se recibió ID de Atención"]);
    exit;
}

// Crear tabla si no existe
$sqlCreateTable = "CREATE TABLE IF NOT EXISTS `atencion_archivos` (
  `idarchivo` int(11) NOT NULL AUTO_INCREMENT,
  `idatencion` int(11) NOT NULL,
  `nombre_original` varchar(255) NOT NULL,
  `ruta_archivo` varchar(255) NOT NULL,
  `tipo_archivo` varchar(50) DEFAULT NULL,
  `fecha_registro` datetime DEFAULT CURRENT_TIMESTAMP,
  `estado` tinyint(1) DEFAULT '1',
  PRIMARY KEY (`idarchivo`),
  KEY `fk_atencion_archivo_idx` (`idatencion`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;";
ejecutarConsulta($sqlCreateTable);

$adjuntosDir = '../files/atencion_archivos/';
if (!file_exists($adjuntosDir)) {
    mkdir($adjuntosDir, 0777, true);
}

$count = 0;
$errors = [];

if (isset($_FILES['archivos_adjuntos'])) {
    $files = $_FILES['archivos_adjuntos'];
    
    // Normalizar array
    $file_names = is_array($files['name']) ? $files['name'] : [$files['name']];
    $file_tmps = is_array($files['tmp_name']) ? $files['tmp_name'] : [$files['tmp_name']];
    $file_types = is_array($files['type']) ? $files['type'] : [$files['type']];

    for ($i = 0; $i < count($file_names); $i++) {
        if (!empty($file_names[$i])) {
            $filename = $file_names[$i];
            $filetmp = $file_tmps[$i];
            $filetype = $file_types[$i];
            $fileerror = isset($files['error'][$i]) ? $files['error'][$i] : 0;

            // Manejo de errores
            if ($fileerror !== UPLOAD_ERR_OK) {
                switch ($fileerror) {
                    case UPLOAD_ERR_INI_SIZE:
                    case UPLOAD_ERR_FORM_SIZE:
                        $errors[] = "El archivo '$filename' excede el tamaño máximo permitido.";
                        break;
                    case UPLOAD_ERR_PARTIAL:
                        $errors[] = "El archivo '$filename' se subió parcialmente.";
                        break;
                    default:
                        $errors[] = "Error al subir '$filename'.";
                }
                continue;
            }

            // Sanitize
            $cleanName = preg_replace('/[^a-zA-Z0-9-_\.]/', '_', $filename);
            $uniqueName = time() . '_' . rand(100,999) . '_' . $cleanName;
            $targetPath = $adjuntosDir . $uniqueName;

            if (move_uploaded_file($filetmp, $targetPath)) {
                // Insertar en BD
                $sqlInsert = "INSERT INTO atencion_archivos (idatencion, nombre_original, ruta_archivo, tipo_archivo) 
                              VALUES ('$idatencion', '$cleanName', '$targetPath', '$filetype')";
                $res = ejecutarConsulta($sqlInsert);
                if ($res) {
                    $count++;
                } else {
                    $errors[] = "Error al guardar '$filename' en base de datos.";
                }
            } else {
                $errors[] = "No se pudo mover '$filename'.";
            }
        }
    }
}

if ($count > 0) {
    echo json_encode(["status" => "success", "message" => "$count archivo(s) subido(s) correctamente", "errors" => $errors]);
} else {
    echo json_encode(["status" => "error", "message" => "No se pudieron subir los archivos", "errors" => $errors]);
}
?>
