<?php

namespace App\Http\Controllers\Api\V1\Play;

use App\Lottery\ErrorCode;
use App\Support\ApiMessage;
use App\Support\ApiResponse;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
use App\Http\Controllers\Controller;
use App\Services\Config\EffectivePlayCatalogService;
use Illuminate\Database\Eloquent\ModelNotFoundException;

/**
 * GET /api/v1/play/effective — 当前生效的玩法目录 + 赔率 + 封顶（公开，无需登录）。
 */
final class PlayEffectiveCatalogController extends Controller
{
    public function __invoke(Request $request, EffectivePlayCatalogService $catalog): JsonResponse
    {
        $currency = $request->query('currency');
        $c = is_string($currency) && $currency !== '' ? $currency : null;

        try {
            return ApiResponse::success($catalog->build($c));
        } catch (ModelNotFoundException) {
            return ApiMessage::errorResponse($request, 'effective_config_not_initialized', ErrorCode::NotFound->value, null, 404);
        } catch (\InvalidArgumentException $e) {
            if ($e->getMessage() === 'currency') {
                return ApiMessage::errorResponse($request, 'invalid_or_disabled_currency', ErrorCode::ConfigCurrencyInvalid->value, null, 400);
            }

            throw $e;
        }
    }
}
