<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use App\Support\LotteryLocale;
use Symfony\Component\HttpFoundation\Response;

/**
 * 【API 语言协商中间件】
 *
 * - 挂载位置：bootstrap/app.php 中对 api 分组 prepend，所有 /api/* 请求都会先执行本中间件。
 * - 职责：解析客户端语言 → 写入 $request->attributes['lottery_locale'] → 调用 app()->setLocale()，
 *         便于 trans()、LotteryMessage 及后续按 zh/en/ne 选库表文案列时使用。
 *
 * 【协商顺序】① 请求头 X-Locale（必须为 config 支持的 zh/en/ne 之一）；② Accept-Language 首选项；③ fallback。
 *
 * 【与前端】浏览器或 App 可直接带 X-Locale，或仅靠 Accept-Language；无需前端维护文案 JSON。
 *
 * 【与异常 JSON】{@see LotteryLocale} 与 middleware 同源，在未命中路由、`lottery_locale` 未写入时仍可从 Header 推导。
 */
final class NegotiateLotteryLocale
{
    public function handle(Request $request, Closure $next): Response
    {
        $locale = LotteryLocale::resolve($request);
        // attribute 名称固定为 lottery_locale，与 Request::lotteryLocale() 宏一致
        $request->attributes->set('lottery_locale', $locale);
        app()->setLocale($locale);

        return $next($request);
    }
}
