<?php
require_once __DIR__.'/_layout.php';
web_require_login();
web_require_owner();

if($_SERVER['REQUEST_METHOD']==='POST'){
    $action = (string)($_POST['action'] ?? 'database_backup');

    if($action === 'database_backup'){
        if(function_exists('bot_admin_tools_make_backup')){
            $r = bot_admin_tools_make_backup(true);
            if(!empty($r['ok'])){
                $link = function_exists('bot_admin_tools_backup_link') ? bot_admin_tools_backup_link($r['file']) : '';
                if($link !== '') $_SESSION['last_backup_link'] = $link;
                web_flash('success','بکاپ دیتابیس ساخته شد: '.basename($r['file']).' | فرمت: '.($r['format'] ?? 'sql'));
            }else{
                web_flash('error','خطا در بکاپ دیتابیس: '.($r['error'] ?? 'نامشخص'));
            }
        }else{
            web_flash('error','سرویس بکاپ دیتابیس در سورس پیدا نشد.');
        }
        web_admin_log('web_backup_create','backup',null,'ساخت بکاپ دیتابیس از پنل وب');
        web_redirect('backups.php');
    }

    if($action === 'settings_export'){
        if(function_exists('bot_settings_backup_create_file')){
            $r = bot_settings_backup_create_file('web_panel');
            if(!empty($r['ok'])){
                $link = function_exists('bot_admin_tools_backup_link') ? bot_admin_tools_backup_link($r['file']) : '';
                if($link !== '') $_SESSION['last_settings_backup_link'] = $link;
                web_flash('success','بکاپ تنظیمات پنل ساخته شد: '.basename($r['file']));
                web_admin_log('web_settings_backup_export','settings',null,'ساخت خروجی تنظیمات پنل',['file'=>basename($r['file']),'count'=>$r['count'] ?? null]);
            }else{
                web_flash('error','خطا در ساخت بکاپ تنظیمات: '.($r['error'] ?? 'نامشخص'));
            }
        }else{
            web_flash('error','سرویس بکاپ تنظیمات در سورس پیدا نشد.');
        }
        web_redirect('backups.php');
    }

    if($action === 'settings_restore'){
        if(!function_exists('bot_settings_backup_restore_array')){
            web_flash('error','سرویس بازگردانی تنظیمات در سورس پیدا نشد.');
            web_redirect('backups.php');
        }
        if(empty($_FILES['settings_backup_file']) || !is_uploaded_file($_FILES['settings_backup_file']['tmp_name'])){
            web_flash('error','فایل بکاپ تنظیمات را انتخاب کن.');
            web_redirect('backups.php');
        }
        $size = (int)($_FILES['settings_backup_file']['size'] ?? 0);
        if($size <= 0 || $size > 2*1024*1024){
            web_flash('error','حجم فایل بکاپ تنظیمات نامعتبر است. حداکثر ۲ مگابایت مجاز است.');
            web_redirect('backups.php');
        }
        $raw = (string)@file_get_contents($_FILES['settings_backup_file']['tmp_name']);
        $json = json_decode($raw, true);
        if(!is_array($json)){
            web_flash('error','فایل انتخاب‌شده JSON معتبر نیست.');
            web_redirect('backups.php');
        }
        $r = bot_settings_backup_restore_array($json, $_SESSION['web_admin_id'] ?? 'web');
        if(!empty($r['ok'])){
            web_flash('success','تنظیمات با موفقیت بازگردانی شد. تعداد آیتم‌های اعمال‌شده: '.(int)($r['restored'] ?? 0));
        }else{
            $err = $r['error'] ?? '';
            if($err === '' && !empty($r['errors']) && is_array($r['errors'])) $err = implode(' | ', array_slice($r['errors'], 0, 5));
            web_flash('warning','بازگردانی کامل نبود. اعمال‌شده: '.(int)($r['restored'] ?? 0).' / ردشده: '.(int)($r['skipped'] ?? 0).($err ? ' | '.$err : ''));
        }
        web_admin_log('web_settings_backup_restore','settings',null,'بازگردانی تنظیمات پنل',['result'=>$r]);
        web_redirect('backups.php');
    }

    web_flash('error','درخواست ناشناخته است.');
    web_redirect('backups.php');
}

$lastDbLink = $_SESSION['last_backup_link'] ?? '';
unset($_SESSION['last_backup_link']);
$lastSettingsLink = $_SESSION['last_settings_backup_link'] ?? '';
unset($_SESSION['last_settings_backup_link']);

web_header('بکاپ و خروجی تنظیمات');
?>
<?php if($lastDbLink !== ''): ?>
    <div class="alert success">بکاپ دیتابیس آماده دانلود است: <a class="btn light" href="<?=web_h($lastDbLink)?>">دانلود بکاپ دیتابیس</a></div>
<?php endif; ?>
<?php if($lastSettingsLink !== ''): ?>
    <div class="alert success">بکاپ تنظیمات آماده دانلود است: <a class="btn light" href="<?=web_h($lastSettingsLink)?>">دانلود بکاپ تنظیمات</a></div>
<?php endif; ?>

<div class="grid">
    <div class="panel">
        <h3>بکاپ دیتابیس</h3>
        <p class="small">برای بکاپ کامل دیتابیس، کاربران، سفارش‌ها و لاگ‌ها استفاده می‌شود. خروجی استاندارد این نسخه <b>.sql.gz</b> است؛ اگر gzip روی هاست فعال نباشد <b>.sql</b> ساخته می‌شود.</p>
        <form method="post">
            <?php web_csrf_input(); ?>
            <input type="hidden" name="action" value="database_backup">
            <button>ساخت بکاپ دیتابیس</button>
        </form>
    </div>

    <div class="panel">
        <h3>خروجی تنظیمات پنل</h3>
        <p class="small">این خروجی فقط تنظیمات غیرحساس را ذخیره می‌کند: چینش دکمه‌ها، رنگ‌ها، متن دکمه‌ها، هدیه استارت، پاداش جمع‌آوری الماس، تنظیمات کانال‌ها و چنل‌های مسدود.</p>
        <form method="post">
            <?php web_csrf_input(); ?>
            <input type="hidden" name="action" value="settings_export">
            <button class="ok">ساخت خروجی تنظیمات</button>
        </form>
    </div>
</div>

<div class="panel">
    <h3>بازگردانی تنظیمات پنل</h3>
    <div class="alert warning">قبل از بازگردانی، بهتر است یک خروجی جدید بگیری. این بخش فقط تنظیمات را برمی‌گرداند و به کاربران، سفارش‌ها، رمز پنل، config.php و config_db.php دست نمی‌زند.</div>
    <form method="post" enctype="multipart/form-data" class="row">
        <?php web_csrf_input(); ?>
        <input type="hidden" name="action" value="settings_restore">
        <input type="file" name="settings_backup_file" accept="application/json,.json" required>
        <button class="secondary">بازگردانی تنظیمات از فایل JSON</button>
    </form>
</div>

<?php if(function_exists('bot_settings_backup_catalog')): ?>
<div class="panel">
    <h3>مواردی که در خروجی تنظیمات ذخیره می‌شود</h3>
    <?php
    $catalog = bot_settings_backup_catalog();
    $labels = function_exists('bot_settings_backup_category_labels') ? bot_settings_backup_category_labels() : [];
    $counts = [];
    foreach($catalog as $row){ $cat = $row['category'] ?? 'other'; $counts[$cat] = ($counts[$cat] ?? 0) + 1; }
    echo '<div class="grid">';
    foreach($counts as $cat=>$cnt){
        web_card($labels[$cat] ?? $cat, (string)$cnt, 'آیتم');
    }
    echo '</div>';
    ?>
    <details><summary>نمایش مسیرهای ذخیره‌شده</summary>
        <?php web_table_start(['دسته','مسیر','نوع']); foreach($catalog as $path=>$row){ echo '<tr><td>'.web_h($labels[$row['category']] ?? $row['category']).'</td><td class="ltr">'.web_h($path).'</td><td>'.web_h($row['storage_type']).'</td></tr>'; } web_table_end(); ?>
    </details>
</div>
<?php endif; ?>

<?php
$dir = WEB_ADMIN_ROOT.'/cache/backups';
if(is_dir($dir)){
    $files = glob($dir.'/*') ?: [];
    usort($files, fn($a,$b)=>filemtime($b)<=>filemtime($a));
    web_table_start(['فایل','نوع','حجم','تاریخ','دانلود']);
    foreach(array_slice($files,0,40) as $f){
        $base = basename($f);
        $type = (strpos($base, 'panel-settings-backup-') === 0) ? 'تنظیمات پنل JSON' : ((preg_match('/\.sql(\.gz)?$/i', $base)) ? 'دیتابیس SQL' : 'دیتابیس/کامل');
        $link = function_exists('bot_admin_tools_backup_link') ? bot_admin_tools_backup_link($f) : '';
        echo '<tr>';
        echo '<td class="ltr">'.web_h($base).'</td>';
        echo '<td>'.web_h($type).'</td>';
        echo '<td>'.number_format((int)filesize($f)).' بایت</td>';
        echo '<td>'.date('Y-m-d H:i:s', filemtime($f)).'</td>';
        echo '<td>'.($link ? '<a class="btn light" href="'.web_h($link).'">دانلود</a>' : '-').'</td>';
        echo '</tr>';
    }
    web_table_end();
}else{
    echo '<div class="alert warning">هنوز بکاپی ساخته نشده.</div>';
}
web_footer();
