<?php
// admin/backup.php
// Pastikan file konfigurasi database tidak menghasilkan output apapun.
include '../config/database.php'; 

// Nama file backup (menggunakan $db_name dari config/database.php)
$db_name = $db_name ?? 'nama_database_anda'; 
$backup_file = 'backup_db_pilkasim_' . $db_name . '_' . date("Y-m-d-H-i-s") . '.sql';

// 1. Definisikan kemungkinan path mysqldump di hosting/Linux
// Coba path umum dulu, lalu fallback ke nama executable saja.
$mysqldump_paths = [
    '/usr/bin/mysqldump',       // Path umum di sebagian besar server Linux
    '/usr/local/bin/mysqldump', // Path umum lain
    'mysqldump'                 // Mencoba dari PATH lingkungan (paling sering berhasil di shared hosting)
];
$mysqldump_command = '';

// 2. Cari path yang paling mungkin berhasil
foreach ($mysqldump_paths as $path) {
    // Di lingkungan hosting, kadang file_exists() pada path sistem tidak selalu akurat.
    // Kita cek jika path adalah 'mysqldump' (berarti mengandalkan PATH) atau file ada.
    if ($path === 'mysqldump' || file_exists($path)) {
        $mysqldump_command = $path;
        break;
    }
}

// 3. Jika tidak ditemukan satupun path yang valid, hentikan.
if (empty($mysqldump_command)) {
    // Output error sebagai SQL Comment
    echo "-- FATAL ERROR: Command 'mysqldump' tidak dapat ditemukan di server hosting.\n";
    echo "-- Solusi: Hubungi penyedia hosting Anda untuk menanyakan path lengkap ke mysqldump (Contoh: /usr/bin/mysqldump).\n";
    echo "-- Kemudian, tambahkan path tersebut ke array \$mysqldump_paths di 'admin/backup.php'.\n";
    exit;
}


// 4. Header untuk memaksa browser mengunduh file
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . basename($backup_file) . '"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');

// 5. Perintah mysqldump
// Menggunakan $mysqldump_command yang sudah ditemukan
$command = escapeshellcmd($mysqldump_command) . 
           " --user=" . escapeshellarg($db_user) . 
           " --password=" . escapeshellarg($db_pass) . 
           " --host=" . escapeshellarg($db_host) . 
           " " . escapeshellarg($db_name);

// 6. Jalankan perintah dan kirim outputnya langsung ke browser
passthru($command, $result);

// 7. Periksa jika ada error
if ($result !== 0) {
    // Output pesan error dalam format SQL comment (agar aman saat restore)
    echo "\n-- \n";
    echo "-- BACKUP GAGAL (Kode Keluar Shell: $result)\n";
    echo "-- Kesalahan terjadi saat menjalankan mysqldump di server. Kemungkinan: \n";
    echo "-- 1. Kredensial database di 'config/database.php' salah. \n";
    echo "-- 2. Fungsi passthru/shell_exec dinonaktifkan oleh hosting (Hubungi support hosting).\n";
    echo "-- 3. Path mysqldump yang ditemukan salah: '$mysqldump_command'. \n";
    echo "-- \n";
}
// Tag penutup PHP dihapus (Best Practice)