<?php
session_start();

// Cek Login
if (!isset($_SESSION['user_id'])) {
    header("HTTP/1.1 401 Unauthorized");
    exit('Unauthorized');
}

$sessionId = isset($_GET['session_id']) ? preg_replace('/[^a-zA-Z0-9_-]/', '', $_GET['session_id']) : '';

if (empty($sessionId)) {
    exit("ID Sesi tidak valid.");
}

$sourceDir = '../../autokoding/projects/' . $sessionId . '/';

if (!is_dir($sourceDir)) {
    exit("Proyek tidak ditemukan atau telah kadaluarsa.");
}

$zipFileName = 'Aistem_Project_' . $sessionId . '.zip';
$zipFilePath = __DIR__ . '/../../autokoding/projects/' . $zipFileName;

// Cek apakah ekstensi ZIP terpasang di PHP
if (!class_exists('ZipArchive')) {
    exit("EROR SISTEM: Ekstensi 'php_zip' tidak aktif di server PHP Anda. <br><br> 
          <b>Cara Mengaktifkan:</b><br>
          1. Buka Control Panel XAMPP.<br>
          2. Klik 'Config' pada Apache -> php.ini.<br>
          3. Cari baris `;extension=zip`.<br>
          4. Hapus titik koma di depannya menjadi `extension=zip`.<br>
          5. Simpan file dan Restart Apache.");
}

// Buat arsip ZIP
$zip = new ZipArchive();
if ($zip->open($zipFilePath, ZipArchive::CREATE | ZipArchive::OVERWRITE) !== true) {
    exit("Gagal membuat arsip ZIP.");
}

// Tambahkan file ke dalam zip (rekursif)
$files = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($sourceDir),
    RecursiveIteratorIterator::LEAVES_ONLY
);

foreach ($files as $name => $file) {
    if (!$file->isDir()) {
        $filePath = $file->getRealPath();
        $fileName = $file->getFilename();

        // Eksklusi file metadata internal
        if ($fileName === '_manifest.json' || $fileName === '_plan.json') {
            continue;
        }
        
        // Dapatkan nama path relatif untuk di dalam zip secara aman di Windows
        $relativePath = str_replace(realpath($sourceDir) . DIRECTORY_SEPARATOR, '', $filePath);
        $relativePath = str_replace('\\', '/', $relativePath); // ZIP butuh forward slash
        
        $zip->addFile($filePath, $relativePath);
    }
}

$zip->close();

// Force download
if (file_exists($zipFilePath)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/zip');
    header('Content-Disposition: attachment; filename="'.basename($zipFilePath).'"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($zipFilePath));
    readfile($zipFilePath);
    
    // Hapus file ZIP sementara setelah didownload
    unlink($zipFilePath);
    exit;
} else {
    exit("Terjadi kesalahan saat menyiapkan file.");
}
