<?php

namespace App\Console\Commands;

use App\Models\AgentNode;
use App\Models\AgentProfile;
use App\Services\Agent\AgentUsedCreditSyncService;
use Illuminate\Console\Command;

/** 重算代理团队已用风险（used_credit），修复历史未同步数据。 */
final class SyncAgentUsedCreditCommand extends Command
{
    protected $signature = 'lottery:sync-agent-used-credit {--site= : 仅处理指定 admin_sites.code}';

    protected $description = '重算代理团队已用风险（used_credit = 子树信用玩家 used_credit + frozen_credit 之和）';

    public function handle(AgentUsedCreditSyncService $sync): int
    {
        $siteCode = $this->option('site');
        $query = AgentNode::query()->orderBy('id');
        if (is_string($siteCode) && $siteCode !== '') {
            $query->whereHas('adminSite', static fn ($q) => $q->where('code', $siteCode));
        }

        $nodes = $query->get();
        $updated = 0;
        foreach ($nodes as $node) {
            $profile = AgentProfile::query()->where('agent_node_id', $node->id)->first();
            $before = $profile !== null ? (int) $profile->used_credit : null;
            $sync->syncForAgent($node);
            $profile?->refresh();
            $after = $profile !== null ? (int) $profile->used_credit : null;
            if ($before !== $after) {
                $updated++;
            }
        }

        $this->info('已处理 '.count($nodes).' 个代理节点，其中 '.$updated.' 个 used_credit 有变更。');

        return self::SUCCESS;
    }
}
