<?php
// One-time installer for referral/affiliate SQL tables and defaults.
// Run once: install_referral_tables.php?run=1 then delete this file.
@ini_set('display_errors','0');
@ini_set('log_errors','1');
header('Content-Type: text/plain; charset=utf-8');
if(php_sapi_name() !== 'cli' && ($_GET['run'] ?? '') !== '1'){
    http_response_code(403);
    echo "برای اجرا از ?run=1 استفاده کنید. بعد از اجرا فایل را حذف کنید.\n";
    exit;
}
$root = __DIR__;
if(is_file($root.'/config.php')) require_once $root.'/config.php';
if(is_file($root.'/config_db.php')) require_once $root.'/config_db.php';
if(is_file($root.'/lib/db_storage.php')) require_once $root.'/lib/db_storage.php';
if(is_file($root.'/app/Services/ReferralService.php')) require_once $root.'/app/Services/ReferralService.php';
if(!function_exists('bot_referral_install_schema')){
    echo "ReferralService.php پیدا نشد یا درست لود نشد.\n";
    exit(1);
}
$ok = bot_referral_install_schema();
echo $ok ? "✅ جدول‌های رفرال ساخته/بررسی شدند.\n" : "⚠️ اتصال دیتابیس فعال نیست یا ساخت جدول انجام نشد؛ حالت فایل JSON همچنان کار می‌کند.\n";

if(function_exists('bot_referral_settings') && function_exists('bot_referral_save_settings')){
    bot_referral_save_settings(bot_referral_settings());
    echo "✅ تنظیمات پیش‌فرض رفرال ذخیره شد.\n";
}

// Best-effort migration: users that already have sub/referrer are inserted into bot_referrals.
$pdo = function_exists('bot_referral_pdo') ? bot_referral_pdo() : null;
$migrated = 0;
if($pdo && function_exists('bot_data_scandir') && function_exists('bot_data_get_json')){
    try{
        $settings = function_exists('bot_referral_settings') ? bot_referral_settings() : [];
        $st = $pdo->prepare('INSERT IGNORE INTO bot_referrals (referrer_id, referred_id, status, signup_reward_mode, signup_reward_amount, signup_reward_applied, active_required_count, active_reward_mode, active_reward_amount, active_reward_applied, referred_join_count, data_json) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)');
        foreach(bot_data_scandir('melat') as $file){
            if($file === '.' || $file === '..' || !preg_match('/^(\d+)\.json$/', $file, $m)) continue;
            $uid = $m[1];
            $u = bot_data_get_json('melat/'.$file, []);
            if(!is_array($u) || empty($u['sub'])) continue;
            $ref = preg_replace('/\D+/', '', (string)$u['sub']);
            if($ref === '' || $ref === $uid) continue;
            $st->execute([
                $ref,
                $uid,
                !empty($u['ref_active_rewarded']) ? 'active_rewarded' : (!empty($u['ref_signup_rewarded']) ? 'signup_rewarded' : 'started'),
                (string)($settings['signup_reward_mode'] ?? 'diamond'),
                0,
                !empty($u['ref_signup_rewarded']) ? 1 : 0,
                (int)($settings['zirjoinads'] ?? 20),
                (string)($settings['active_reward_mode'] ?? 'diamond'),
                (int)($settings['coin-join'] ?? 10),
                !empty($u['ref_active_rewarded']) ? 1 : 0,
                (int)($u['ads'] ?? 0),
                function_exists('bot_referral_json') ? bot_referral_json(['migrated'=>true,'time'=>time()]) : json_encode(['migrated'=>true], JSON_UNESCAPED_UNICODE)
            ]);
            $migrated += (int)$st->rowCount();
        }
        echo "✅ مهاجرت رفرال‌های قدیمی: {$migrated} رکورد جدید.\n";
    }catch(Throwable $e){
        echo "⚠️ خطا در مهاجرت رکوردهای قدیمی: ".$e->getMessage()."\n";
    }
}

echo "تمام شد. این فایل را از هاست حذف کنید.\n";
