<?php
require_once("../functions.php");
if (comprobar_override(str_replace($_SERVER['DOCUMENT_ROOT'], '', __FILE__))) exit;
$pag = basename($_SERVER['PHP_SELF']);
comprobar_postget("post", ["id_empleado"], $pag, true, "/views/tables/documentos");
gen_plantilla(true, $pag, false, false, '', false, false);

if (session_status() !== PHP_SESSION_ACTIVE) session_start();
/*******************************************************************************
 *                                [Parámetros]                                 *
 *******************************************************************************/

$id = filter_input(INPUT_POST, "id_empleado", FILTER_SANITIZE_NUMBER_INT);
$alias = filter_input(INPUT_POST, "alias", FILTER_SANITIZE_SPECIAL_CHARS);
$uploadDir = $_SERVER['DOCUMENT_ROOT'] . SITIO_CARPETA . '/documents/' . $id . '/';

if(isset($_POST['nomina'])) {
    $alias = filter_input(INPUT_POST, "alias_nomina", FILTER_SANITIZE_SPECIAL_CHARS);
    $uploadDir .= 'nominas/';
}

if (isset($_FILES['medio']) && $_FILES['medio']['error'] == UPLOAD_ERR_OK) {
    $tmpName = $_FILES['medio']['tmp_name'];

    // Nombre original (sin ruta)
    $originalName = basename($_FILES['medio']['name']);

    // Separa base y extensión
    $base = pathinfo($originalName, PATHINFO_FILENAME);
    $ext  = strtolower(pathinfo($originalName, PATHINFO_EXTENSION));

    // Normaliza: quita tildes, espacios raros y caracteres no seguros
    $baseAscii = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $base);
    $baseAscii = preg_replace('/[^A-Za-z0-9_\-]+/', '_', $baseAscii);
    $baseAscii = trim($baseAscii, '_.');
    if ($baseAscii === '') $baseAscii = 'archivo';

    // Mantén el nombre original (saneado) y la extensión en tus variables
    $fileName = $baseAscii;
    $tipo = $ext ? ('.' . $ext) : '';

    // Si ya existe, añade sufijo (1), (2), ...
    $intento = 1;
    while (file_exists($uploadDir . $fileName . $tipo)) {
        $fileName = $baseAscii . '(' . $intento . ')';
        $intento++;
    }

    // Detecta mime real del archivo (mejor que fiarse de $_FILES['...']['type'])
    $finfo = new finfo(FILEINFO_MIME_TYPE);
    $mime = $finfo->file($tmpName) ?: 'application/octet-stream';
    $posicion = strpos($mime, '/');
    $tipo_archivo = $posicion !== false ? substr($mime, $posicion + 1) : '';
} else {
    crear_log(
        'error',
        'Error subir archivo',
        $pag,
        'Error al subir el archivo a la siguiente ruta: ' . $uploadDir . $fileName . "."
    );
    $tab = isset($_POST['nomina']) ? 'nominas' : 'documentos';
    header("Location:" . SITIO_CARPETA . "/views/tables/documentos?" . $tab . "&id_empleado=" . $id . "&tipo=error&mensaje=No se ha seleccionado ningún archivo");
    exit;
}

if (!file_exists($uploadDir)) {
    mkdir($uploadDir, 0755, true);
}

if (!move_uploaded_file($tmpName, $uploadDir . $fileName . $tipo)) {
    crear_log(
        'error',
        'Error subir archivo',
        $pag,
        'Error al subir el archivo a la siguiente ruta: ' . $uploadDir . $fileName . "."
    );
    $tab = isset($_POST['nomina']) ? 'nominas' : 'documentos';
    header("Location:" . SITIO_CARPETA . "/views/tables/documentos?" . $tab . "&id_empleado=" . $id . "&tipo=error&mensaje=No se ha podido subir el archivo");
} else {
    crear_log(
        'info',
        'Archivo subido',
        $pag,
        'Archivo subido con la siguiente ruta: ' . $uploadDir . $fileName . $tipo
    );

    $tipo_archivo =  substr($_FILES['medio']["type"], $posicion + 1);

    $tipo_medio = match ($tipo_archivo) {
        'png', 'jpg', 'jpeg', 'webp' => 'imagen',
        "pdf", "odt", "doc", "docx", "txt", "xls", "xlsx", "csv" => 'documento',
        default => 'desconocido'
    };
    //Registrarlo
    consulta(
        "INSERT INTO `documentos`(`id_usuario_subido`,`id_empleado`, `alias`, `archivo`,`nomina`, `fecha`) VALUES (?,?,?,?,?,?);",
        [
            $_SESSION['id_usuario'],
            $id,
            $alias,
            $fileName . $tipo,
            isset($_POST['nomina']) ? 1 : 0,
            date("Y-m-d H:i:s")
        ],
        false
    );
    $tab = isset($_POST['nomina']) ? 'nominas' : 'documentos';
    header("Location:" . SITIO_CARPETA . "/views/tables/documentos?" . $tab . "&id_empleado=" . $id . "&tipo=correcto&mensaje=Medio subido correctamente");
}
