<?php

namespace app\process;

use Webman\App;

class Http extends App
{
    /**
     * 在父类处理前拦截 OPTIONS 预检，直接返回 CORS 头（避免预检未命中路由时无 CORS）
     * 必须与 AllowCrossDomain::optionsResponse 一致，否则会覆盖中间件里对 Allow-Headers（如 server）的配置
     */
    public function onMessage($connection, $request): void
    {
        $method = $request->method();
        if (is_string($method) && strtoupper($method) === 'OPTIONS') {
            $path = $request->path();
            $path = is_string($path) ? trim($path, '/') : '';
            $isApiOrAdmin = $path !== '' && (str_starts_with($path, 'api') || str_starts_with($path, 'admin'));
            if ($isApiOrAdmin) {
                $response = \app\common\middleware\AllowCrossDomain::optionsResponse($request);
                $connection->send($response);
                return;
            }
        }
        parent::onMessage($connection, $request);
    }
}