<?php

namespace app\middleware;

use app\model\ThirdUserAdvertiser;
//use ReflectionClass;
use Webman\MiddlewareInterface;
use Webman\Http\Response;
use Webman\Http\Request;

class OauthCheck implements MiddlewareInterface
{
    public function process(Request $request, callable $handler): Response
    {

        $requestData = $request->all(); // 获取请求数据
        $customerId  = isset($requestData['ad_customer_id']) ? $requestData['ad_customer_id'] : getenv('GOOGLE_ADS_CUSTOMER_ID');
        // 通过 advertiser_id 查询 ThirdUserAdvertiser,联表查询 ThirdUser 数据
        $userAdvertiser = ThirdUserAdvertiser::with('googleUser')  // 联表查询 user 关联
        ->where('advertiser_id', $customerId)  // 根据 advertiser_id 查询
        ->find();  // 获取第一个结果
// 如果找到广告主数据
        if ($userAdvertiser && $userAdvertiser->googleUser) {
            // 获取关联用户的 access_token
            $accessToken = $userAdvertiser->googleUser->access_token;
            if (empty($accessToken)) {
                return Json([
                    'code' => 300,
                    'msg' => 'AccessToken 为空或过期',
                    'data' => []
                ]);
            }
            $request->login_customer_id = $customerId;
            $request->access_token = $accessToken;
        } else {
            return Json([
                'code' => 300,
                'msg' => '未找到该广告主或关联的用户',
                'data' => []
            ]);
        }


//        if (session('user')) {
//            // 已经登录,请求继续向洋葱芯穿越
//            return $handler($request);
//        }

        // 通过反射获取控制器哪些方法不需要登录
//        $controller  = new ReflectionClass($request->controller);
//        $noNeedLogin = $controller->getDefaultProperties()['noNeedLogin'] ?? [];

        // 访问的方法需要登录
//        if (!in_array($request->action, $noNeedLogin)) {
//            // 拦截请求,返回一个重定向响应,请求停止向洋葱芯穿越
//            return redirect('/user/login');
//        }

        // 不需要登录,请求继续向洋葱芯穿越
        return $handler($request);
    }
}