<?php
session_start();
require_once __DIR__ . '/../../config/database.php';

// Mostrar tabla de expedientes
function index() {
    if (!isset($_SESSION['usuario_id'])) {
        header('Location: /IMPORTADORES/login');
        exit;
    }
    $conn = getConnection();
    $id_importador = $_SESSION['usuario_id'];

    $sql = "
        SELECT
            sif.id_solicitud,
            sif.numero_pedimento,
            sif.fecha_factura,
            sif.aduana,
            sif.proveedor_clave,
            COUNT(ea.id) AS total_archivos,
            ISNULL(SUM(ea.tamano_archivo), 0) AS total_tamano
        FROM solicitud_importacion_factura sif
        LEFT JOIN expediente_archivos ea ON ea.id_solicitud = sif.id_solicitud
        WHERE sif.numero_pedimento IS NOT NULL AND sif.id_importador = ?
        GROUP BY sif.id_solicitud, sif.numero_pedimento, sif.fecha_factura, sif.aduana, sif.proveedor_clave
        ORDER BY sif.fecha_factura DESC
    ";

    $stmt = sqlsrv_query($conn, $sql, [$id_importador]);
    $expedientes = [];

    if ($stmt) {
        while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
            $expedientes[] = $row;
        }
    }

    include __DIR__ . '/../../views/expediente/index.php';
}

function subir($id_solicitud) {
    include __DIR__ . '/../../views/expediente/subir.php';
}

function subir_handler() {
    if (!isset($_POST['id_solicitud']) || !isset($_FILES['archivos']) || !isset($_SESSION['usuario_id'])) {
        die("❌ Solicitud inválida.");
    }

    $conn = getConnection();
    $id_solicitud = (int) $_POST['id_solicitud'];
    $id_importador = $_SESSION['usuario_id'];

    // Validar propiedad de la solicitud
    $validStmt = sqlsrv_query($conn, "SELECT 1 FROM solicitud_importacion_factura WHERE id_solicitud = ? AND id_importador = ?", [$id_solicitud, $id_importador]);
    if (!sqlsrv_fetch($validStmt)) {
        die("❌ No tienes permisos para esta solicitud.");
    }

    $archivos = $_FILES['archivos'];
    $usuario = $_SESSION['usuario_nombre'] ?? 'sistema';

    $uploadDir = __DIR__ . '/../../uploads/expedientes/' . $id_solicitud;
    if (!is_dir($uploadDir)) {
        mkdir($uploadDir, 0775, true);
    }

    for ($i = 0; $i < count($archivos['name']); $i++) {
        if ($archivos['error'][$i] !== 0) continue;

        $nombreOriginal = basename($archivos['name'][$i]);
        $nombreSeguro = uniqid() . '_' . preg_replace('/[^A-Za-z0-9._-]/', '_', $nombreOriginal);
        $rutaFinal = $uploadDir . '/' . $nombreSeguro;

        move_uploaded_file($archivos['tmp_name'][$i], $rutaFinal);

        $rutaDb = "uploads/expedientes/$id_solicitud/$nombreSeguro";
        $tamanoKb = round(filesize($rutaFinal) / 1024, 2);
        $tipoArchivo = mime_content_type($rutaFinal);

        $sql = "INSERT INTO expediente_archivos (id_solicitud, nombre_archivo, ruta_archivo, tipo_archivo, tamano_archivo, creado_por)
                VALUES (?, ?, ?, ?, ?, ?)";

        $params = [$id_solicitud, $nombreOriginal, $rutaDb, $tipoArchivo, $tamanoKb, $usuario];
        sqlsrv_query($conn, $sql, $params);
    }

    header("Location: /IMPORTADORES/expediente/ver/$id_solicitud");
    exit;
}

function ver($id_solicitud)
{
    if (!isset($_SESSION['usuario_id'])) {
        header('Location: /IMPORTADORES/login');
        exit;
    }

    $conn = getConnection();
    $id_importador = $_SESSION['usuario_id'];
    $archivos = [];

    $sql = "SELECT * FROM expediente_archivos WHERE id_solicitud = ? AND id_solicitud IN (SELECT id_solicitud FROM solicitud_importacion_factura WHERE id_importador = ?) ORDER BY creado_en DESC";
    $stmt = sqlsrv_query($conn, $sql, [$id_solicitud, $id_importador]);

    if ($stmt) {
        while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
            if (is_string($row['creado_en'])) {
                $row['creado_en'] = new DateTime($row['creado_en']);
            }
            $archivos[] = $row;
        }
    }

    include __DIR__ . '/../../views/expediente/ver.php';
}

function ver_archivo($id_archivo) {
    if (!isset($_SESSION['usuario_id'])) {
        header('Location: /IMPORTADORES/login');
        exit;
    }

    $conn = getConnection();
    $sql = "SELECT ea.*, sif.id_importador FROM expediente_archivos ea JOIN solicitud_importacion_factura sif ON sif.id_solicitud = ea.id_solicitud WHERE ea.id = ?";
    $stmt = sqlsrv_query($conn, $sql, [$id_archivo]);
    $archivo = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);

    if (!$archivo || $archivo['id_importador'] != $_SESSION['usuario_id']) {
        http_response_code(403);
        echo "Archivo no autorizado o no encontrado.";
        exit;
    }

    $ruta = __DIR__ . '/../../' . $archivo['ruta_archivo'];
    if (!file_exists($ruta)) {
        http_response_code(404);
        echo "El archivo no existe físicamente.";
        exit;
    }

    $tipo = $archivo['tipo_archivo'] ?? mime_content_type($ruta);
    $nombre = $archivo['nombre_archivo'];

    header('Content-Type: ' . $tipo);
    header('Content-Length: ' . filesize($ruta));
    header("Content-Disposition: inline; filename=\"" . basename($nombre) . "\"");
    readfile($ruta);
    exit;
}

function descargar_zip($id_solicitud)
{
    if (!isset($_SESSION['usuario_id'])) {
        http_response_code(403);
        echo "No autorizado.";
        exit;
    }

    $conn = getConnection();
    $id_importador = $_SESSION['usuario_id'];

    $sql = "
        SELECT ea.nombre_archivo, ea.ruta_archivo
        FROM expediente_archivos ea
        JOIN solicitud_importacion_factura sif ON sif.id_solicitud = ea.id_solicitud
        WHERE ea.id_solicitud = ? AND sif.id_importador = ?
    ";

    $stmt = sqlsrv_query($conn, $sql, [$id_solicitud, $id_importador]);
    if (!$stmt) {
        http_response_code(500);
        echo "Error al consultar archivos.";
        exit;
    }

    $archivos = [];
    while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
        $ruta_absoluta = __DIR__ . '/../../' . $row['ruta_archivo'];
        if (file_exists($ruta_absoluta)) {
            $archivos[] = [
                'ruta' => $ruta_absoluta,
                'nombre' => $row['nombre_archivo']
            ];
        }
    }

    if (empty($archivos)) {
        http_response_code(404);
        echo "No hay archivos válidos para comprimir.";
        exit;
    }

    $zip_file = tempnam(sys_get_temp_dir(), 'expediente_') . '.zip';
    $zip = new ZipArchive();

    if ($zip->open($zip_file, ZipArchive::CREATE) !== true) {
        http_response_code(500);
        echo "No se pudo crear el archivo ZIP.";
        exit;
    }

    foreach ($archivos as $a) {
        $zip->addFile($a['ruta'], $a['nombre']);
    }

    $zip->close();

    header('Content-Type: application/zip');
    header('Content-Disposition: attachment; filename="expediente_' . $id_solicitud . '.zip"');
    header('Content-Length: ' . filesize($zip_file));
    readfile($zip_file);
    unlink($zip_file);
    exit;
}





