<?php
require_once __DIR__ . '/../../config.php';
require_once __DIR__ . '/../../engine/Kernel.php';
require_once __DIR__ . '/../../engine/Logger.php';
require_once __DIR__ . '/../../engine/BillingEngine.php';
require_once __DIR__ . '/../../engine/UsageMeter.php';
$ctx = Kernel::handle(['auth' => 'optional']);
$u = $ctx['user'];

$type    = $_GET['type'] ?? 'learn';
$allowed = ['learn' => 'points_learn', 'trade' => 'points_trade', 'community' => 'points_community', 'family' => 'points_family'];
$col     = $allowed[$type] ?? 'points_learn';

// ── ترتيب الرتب ────────────────────────────────────────────────
$ranks = [
    'طالب جديد'      => ['min' => 0,   'next' => 'متعلم نشيط',     'next_min' => 50],
    'متعلم نشيط'     => ['min' => 50,  'next' => 'مبدع سوداني',    'next_min' => 150],
    'مبدع سوداني'    => ['min' => 150, 'next' => 'خبير الحي',      'next_min' => 300],
    'خبير الحي'      => ['min' => 300, 'next' => 'قائد المجتمع',   'next_min' => 500],
    'قائد المجتمع'   => ['min' => 500, 'next' => 'حامل المعرفة',   'next_min' => 800],
    'حامل المعرفة'   => ['min' => 800, 'next' => null,              'next_min' => null],
];

// ── Leaderboard عالمي ──────────────────────────────────────────
$global_st = db()->prepare("SELECT id, name, rank_title, $col AS points FROM users WHERE $col > 0 ORDER BY $col DESC LIMIT 20");
$global_st->execute();
$global_board = $global_st->fetchAll();

// ── Leaderboard الحي ───────────────────────────────────────────
$hood_board = [];
$hood = (int)$u['neighborhood_id'];
if ($hood) {
    $hs = db()->prepare("SELECT id, name, rank_title, $col AS points FROM users WHERE neighborhood_id = ? AND $col > 0 ORDER BY $col DESC LIMIT 10");
    $hs->execute([$hood]);
    $hood_board = $hs->fetchAll();
}

// ── بيانات المستخدم الحالي ─────────────────────────────────────
$me_st = db()->prepare("SELECT $col AS my_points, rank_title FROM users WHERE id = ?");
$me_st->execute([$u['id']]);
$my = $me_st->fetch();

$my_points    = (int)($my['my_points']  ?? 0);
$my_rank      = $my['rank_title']       ?? 'طالب جديد';
$rank_info    = $ranks[$my_rank]        ?? $ranks['طالب جديد'];

// ── نصيحة الترقي من الذكاء الاصطناعي (مرة كل 10 نقاط فقط لتوفير API) ──
$upgrade_tip = '';
if ($rank_info['next'] && ($my_points % 10 === 0 || isset($_GET['tip']))) {
    $needed = $rank_info['next_min'] - $my_points;
    $tip_prompt = "المستخدم في رتبة «$my_rank» ولديه $my_points نقطة في محور {$type}. يحتاج $needed نقطة إضافية للوصول لرتبة «{$rank_info['next']}». قدّم نصيحة واحدة سريعة وعملية (جملة واحدة فقط) بأسلوب سوداني ودود.";
    // AI limit guard (tip costs ~80 tokens — cheap but should be bounded)
    $_lb_plan  = $u['plan_key'] ?? $u['subscription_tier'] ?? 'free';
    $_lb_limit = BillingEngine::checkAILimit((int)$u['id'], $_lb_plan);
    if (!empty($_lb_limit['exceeded'])) {
        $upgrade_tip = ''; // skip tip if daily limit reached — not critical
    } else {
        $_um_lb = UsageMeter::wrap((int)$u['id'], 'chat', 'platform', fn() => AIClient::call($tip_prompt, 'أنت مدرّب تحفيزي في منصة سودانا. اجعل نصيحتك مباشرة وعملية وملهمة.', 'auto', 80, 0.8, false), ['skip_debit' => true]);
        $upgrade_tip = $_um_lb['ok'] ? ($_um_lb['result']['text'] ?? '') : '';
    }
    unset($_lb_plan, $_lb_limit);
}

json_response([
    'success'      => true,
    'global'       => $global_board,
    'hood'         => $hood_board,
    'my_points'    => $my_points,
    'rank_title'   => $my_rank,
    'next_rank'    => $rank_info['next'],
    'points_to_next' => $rank_info['next_min'] ? max(0, $rank_info['next_min'] - $my_points) : 0,
    'upgrade_tip'  => $upgrade_tip,
    'type'         => $type,
]);
