<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

/**
 * 子域名 Session 隔离中间件
 *
 * 为子域名应用设置独立的 Session Cookie 名称，
 * 避免与管理端（主域名）的 Session 冲突导致 CSRF token mismatch。
 *
 * 使用方式：在域名路由组中添加此中间件
 * Route::domain('bbs.example.com')->middleware(['web', 'subdomain.session'])->group(...)
 */
class SubdomainSession
{
    /**
     * 处理传入请求
     *
     * 将 Session Cookie 名称修改为基于子域名的唯一名称，
     * 使每个子域名应用拥有独立的 Session 空间。
     */
    public function handle(Request $request, Closure $next)
    {
        $host = $request->getHost();
        $baseCookie = config('session.cookie', 'cmspro-session');

        // 将子域名中的点和横杠替换为下划线，生成合法的 Cookie 名称
        $suffix = str_replace(['.', '-'], '_', $host);
        $newCookieName = $baseCookie . '_' . $suffix;

        // 动态修改 Session Cookie 名称
        config(['session.cookie' => $newCookieName]);

        // 同步修改 XSRF-TOKEN Cookie 名称，保持一致
        // （Laravel 的 EncryptCookies 和 PreventRequestForgery 使用 session.cookie 配置）

        return $next($request);
    }
}
