<?php

namespace app\middleware;

use think\Request;
use think\response\Json;
use app\common\util\Result;

/**
 * 自动封装Result 中间件
 */
class AutoResult
{
    public function handle(Request $request, \Closure $next)
    {
        $request->withHeader(['Accept' => '*/*']);
        /** @var \think\Response */
        $response = $next($request);

        // 已经是json数据了,不做处理
        if ($response instanceof Json) {
            return $response;
        }

        $data = $response->getData();
        // 过滤string和空值,如果需要data: string, 需要使用Result::success()
        if (is_string($data) || is_null($data)) {
            return $response;
        }
        // 如果已经是Result,转成数组
        if ($data instanceof Result) {
            return json($data->toArray());
        }

        return Result::rest($data);
    }
}