#!/usr/bin/env php
<?php
/**
 * auto_backup.php — বধুবরণ জুয়েলার্স ERP Auto Backup
 * File: /home/jewellersbd/public_html/erp.jewellersbd.com/tools/auto_backup.php
 * Cron: প্রতিদিন রাত ২টায় চলবে
 *
 * কাজ:
 *   ১) jewellersbd_erp DB dump করে .sql.gz ফাইল তৈরি করে
 *   ২) /home/jewellersbd/public_html/erp.jewellersbd.com/backup/ ফোল্ডারে সংরক্ষণ
 *   ৩) ৭ দিনের বেশি পুরোনো backup auto delete
 *   ৪) প্রতিটা run-এর log রাখে backup/backup.log ফাইলে
 */

// ===== Config =====
$host    = 'localhost';
$user    = 'jewellersbd_user';
$pass    = 'D2026Berp';
$db      = 'jewellersbd_erp';
$keep_days = 7; // কতদিনের backup রাখবে

$backup_dir = '/home/jewellersbd/public_html/erp.jewellersbd.com/backup';
$log_file   = $backup_dir . '/backup.log';

// ===== Helper: Log =====
function write_log($msg, $log_file) {
    $line = '[' . date('Y-m-d H:i:s') . '] ' . $msg . PHP_EOL;
    file_put_contents($log_file, $line, FILE_APPEND | LOCK_EX);
    echo $line;
}

// ===== ১) Backup ফোল্ডার আছে কিনা চেক =====
if (!is_dir($backup_dir)) {
    mkdir($backup_dir, 0750, true);
    write_log('backup ফোল্ডার তৈরি করা হয়েছে: ' . $backup_dir, $log_file);
}

// ===== ২) .htaccess দিয়ে backup ফোল্ডার web থেকে লুকাও =====
$htaccess = $backup_dir . '/.htaccess';
if (!file_exists($htaccess)) {
    file_put_contents($htaccess, "Order Deny,Allow\nDeny from all\n");
    write_log('.htaccess তৈরি — web থেকে backup access বন্ধ', $log_file);
}

// ===== ৩) mysqldump path খোঁজো =====
$mysqldump = '';
foreach (['/usr/bin/mysqldump', '/usr/local/bin/mysqldump', '/usr/local/mysql/bin/mysqldump'] as $path) {
    if (file_exists($path)) { $mysqldump = $path; break; }
}
if (!$mysqldump) {
    $mysqldump = trim(shell_exec('which mysqldump 2>/dev/null'));
}
if (!$mysqldump) {
    write_log('ERROR: mysqldump পাওয়া যায়নি — backup ব্যর্থ', $log_file);
    exit(1);
}

// ===== ৪) Backup file নাম =====
$filename   = 'erp_backup_' . date('Y-m-d_H-i-s') . '.sql.gz';
$filepath   = $backup_dir . '/' . $filename;

// ===== ৫) mysqldump চালাও =====
$cmd = sprintf(
    '%s --host=%s --user=%s --password=%s --single-transaction --routines --triggers --hex-blob %s | gzip > %s 2>&1',
    escapeshellcmd($mysqldump),
    escapeshellarg($host),
    escapeshellarg($user),
    escapeshellarg($pass),
    escapeshellarg($db),
    escapeshellarg($filepath)
);

$output = [];
$return_code = 0;
exec($cmd, $output, $return_code);

if ($return_code !== 0 || !file_exists($filepath) || filesize($filepath) < 100) {
    write_log('ERROR: DB dump ব্যর্থ (return code: ' . $return_code . ')', $log_file);
    if (file_exists($filepath)) unlink($filepath); // ভাঙা ফাইল মুছো
    exit(1);
}

$size_kb = round(filesize($filepath) / 1024, 1);
write_log('✅ Backup সফল: ' . $filename . ' (' . $size_kb . ' KB)', $log_file);

// ===== ৬) পুরোনো backup মুছো (৭ দিনের বেশি) =====
$deleted = 0;
$files = glob($backup_dir . '/erp_backup_*.sql.gz');
if ($files) {
    $cutoff = time() - ($keep_days * 86400);
    foreach ($files as $f) {
        if (filemtime($f) < $cutoff) {
            unlink($f);
            $deleted++;
            write_log('পুরোনো backup মুছা হয়েছে: ' . basename($f), $log_file);
        }
    }
}
if ($deleted === 0) {
    write_log('পুরোনো backup মোছার প্রয়োজন নেই', $log_file);
}

// ===== ৭) সারাংশ =====
$total = count(glob($backup_dir . '/erp_backup_*.sql.gz'));
write_log('মোট backup এখন: ' . $total . ' টি | (' . $keep_days . ' দিনের বেশি হলে auto মুছবে)', $log_file);
write_log('---', $log_file);

exit(0);