<?php

/**
 * 文件功能：后台积分活动统计控制器
 * 展示今日（或指定日期）各来源活动产生的经验/金币/魅力统计，以及今日净流通量。
 * 仅限 superlevel 以上管理员访问。
 *
 * @author   ChatRoom Laravel
 *
 * @version  1.0.0
 */

namespace App\Http\Controllers\Admin;

use App\Enums\CurrencySource;
use App\Http\Controllers\Controller;
use App\Models\UserCurrencyLog;
use App\Services\UserCurrencyService;
use Illuminate\Http\Request;
use Illuminate\View\View;

class CurrencyStatsController extends Controller
{
    /**
     * 注入积分统计服务
     */
    public function __construct(
        private readonly UserCurrencyService $currencyService,
    ) {}

    /**
     * 显示指定日期的积分活动统计（默认今日）。
     */
    public function index(Request $request): View
    {
        // 日期选择（默认今日）
        $date = $request->input('date', today()->toDateString());

        // 各来源活动产出统计（按 source + currency 分组汇总）
        $stats = $this->currencyService->activityStats($date);

        // 按货币类型分组，方便视图展示
        $statsByType = $stats->groupBy('currency')->map(
            fn ($rows) => $rows->keyBy('source')
        );

        // 今日净流通量（正向增加 - 负向消耗），可判断通货膨胀
        $netFlow = [];
        foreach (['exp', 'gold', 'charm'] as $currency) {
            $totalIn = UserCurrencyLog::whereDate('created_at', $date)
                ->where('currency', $currency)->where('amount', '>', 0)
                ->sum('amount');
            $totalOut = UserCurrencyLog::whereDate('created_at', $date)
                ->where('currency', $currency)->where('amount', '<', 0)
                ->sum('amount');
            $netFlow[$currency] = [
                'in' => $totalIn,
                'out' => abs($totalOut),
                'net' => $totalIn + $totalOut, // 净增量
            ];
        }

        // 所有已知来源（供视图展示缺失来源的空行）
        $allSources = CurrencySource::cases();

        return view('admin.currency-stats.index', compact(
            'date', 'stats', 'statsByType', 'netFlow', 'allSources',
        ));
    }
}
