<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\Log;
use Laravel\Lumen\Routing\Controller as BaseController;

class Controller extends BaseController
{
    //请求的参数
    public $requestData;
    //请求者IP
    public $clientIp = '';

    public function __construct()
    {
        header("Content-type: text/html; charset=utf-8");
        header('Access-Control-Allow-Origin:*');
        $this->requestData = request()->all();
        $this->clientIp = request()->ip();
    }

    /**
     * 检查必要参数
     * @param array $paramConf 指定必要参数
     * @param str $all 是否全配置
     */
    public function checkParam($paramConf, $all = '')
    {
        if (!empty($all)) {
            //对待匹配
            if (count(array_diff(array_keys($this->requestData), $paramConf)) >= 1)
                echo json(error('必须按指定参数来传参'));
                return ;
        } else {
            //检查指定参数是否存在
            if (count($paramConf) != count(array_intersect($paramConf, array_keys($this->requestData))))
                echo json(error('缺少必须参数'));
                return ;
        }
    }

    /**
     * 成功格式化返回
     *
     * @param $data
     * @return \Illuminate\Http\JsonResponse
     */
    protected function success($data = [])
    {
        $res = [
            'status' => $data['code'] ?? 200,
            'msg' => $data['message'] ?? 'success',
            'data' => $data['data'] ?? []
        ];
        echo response()->json($res)->setEncodingOptions(JSON_UNESCAPED_UNICODE);
        exit();
    }

    /**
     * 失败格式化返回
     *
     * @param $message
     * @param $code
     * @return \Illuminate\Http\JsonResponse
     */
    protected function fail($message = 'fail', $code = 500)
    {
        $res = [
            'status' => $code,
            'msg' => $message,
            'data' => []
        ];
        Log::error(json_encode($res, JSON_UNESCAPED_UNICODE));
        echo response()->json($res)->setEncodingOptions(JSON_UNESCAPED_UNICODE);
        exit();
    }

    /**
     * 调试
     */
    public function shutdownAction()
    {
        $error = error_get_last();
        if (!is_null($error)) { // 异常退出
            dingdingLog($error);
        }
    }
}