<?php
// 应用公共文件

use app\common\service\AuthService;
use think\facade\Cache;

/**
 * 钉钉打印日志
 * @param $message
 * @return array|bool|string
 */
if (!function_exists('dingdingLog')) {
    function dingdingLog($message)
    {
        if (is_array($message)) {
            $message = "该参数是数组:" . var_export($message, true);
        }
        $data = array('msgtype' => 'text', 'text' => array('content' => '[ ' . date("Y-m-d H:i:s") . ' ] - 日志:' . $message));
        $post_string = json_encode($data);
        $ch = curl_init();
        $access_token = 'b74a7e686873baaed443c4d4bf6c68e3f58debc79324c4d3ea14549dc43586f2';
        curl_setopt($ch, CURLOPT_URL, 'https://oapi.dingtalk.com/robot/send?access_token=' . $access_token);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json;charset=utf-8'));
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        // 线下环境不用开启curl证书验证, 未调通情况可尝试添加该代码
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        $data = curl_exec($ch);
        curl_close($ch);
        return $data;
    }
}

/**
 * curl get
 * @param string $url
 * @param array $headers
 * @return bool|mixed
 */
if (!function_exists('curl_get')) {
    function curl_get($url = '', $headers = [])
    {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_HEADER, false);    //是否在展示header信息
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
//    curl_setopt($curl,CURLOPT_PROXY,'127.0.0.1:8888');
        if (preg_match("/^https(.*)?/i", $url)) {
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); //规避ssl的证书检查
            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
        }
        curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 5);
        curl_setopt($curl, CURLOPT_TIMEOUT, 5);
        curl_setopt($curl, CURLOPT_ENCODING, 'gzip');
        count($headers) && curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
        $result = curl_exec($curl);
        $result_no = curl_errno($curl);
        curl_close($curl);
        if ($result_no != 0) {  // 请求异常,写日志
            return false;
        } else {
            return $result;
        }
    }
}

/**
 * post 发送
 * @param string $url
 * @param array $headers
 * @param string $post
 * @return bool|mixed
 */
if (!function_exists('curl_post')) {
    function curl_post($url = '', $headers = [], $post = '')
    {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_HEADER, false);    //是否在展示header信息
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        if (preg_match("/^https(.*)?/i", $url)) {
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); //规避ssl的证书检查
            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
        }
        curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 5);
        curl_setopt($curl, CURLOPT_TIMEOUT, 5);
        curl_setopt($curl, CURLOPT_ENCODING, "gzip");
        count($headers) && curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($curl, CURLOPT_POST, true);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $post);  //post 数据
        $result = curl_exec($curl);
        $result_no = curl_errno($curl);
        curl_close($curl);
        if ($result_no != 0) {  // 请求异常,写日志
            return false;
        } else {
            return $result;
        }
    }
}

if (!function_exists('__url')) {

    /**
     * 构建URL地址
     * @param string $url
     * @param array $vars
     * @param bool $suffix
     * @param bool $domain
     * @return string
     */
    function __url(string $url = '', array $vars = [], $suffix = true, $domain = false)
    {
        return url($url, $vars, $suffix, $domain)->build();
    }
}

if (!function_exists('password')) {

    /**
     * 密码加密算法
     * @param $value 需要加密的值
     * @param $type  加密类型,默认为md5 (md5, hash)
     * @return mixed
     */
    function password($value)
    {
        $value = sha1('blog_') . md5($value) . md5('_encrypt') . sha1($value);
        return sha1($value);
    }

}

if (!function_exists('xdebug')) {

    /**
     * debug调试
     * @param string|array $data 打印信息
     * @param string $type 类型
     * @param string $suffix 文件后缀名
     * @param bool $force
     * @param null $file
     * @deprecated 不建议使用,建议直接使用框架自带的log组件
     */
    function xdebug($data, $type = 'xdebug', $suffix = null, $force = false, $file = null)
    {
        !is_dir(runtime_path() . 'xdebug/') && mkdir(runtime_path() . 'xdebug/');
        if (is_null($file)) {
            $file = is_null($suffix) ? runtime_path() . 'xdebug/' . date('Ymd') . '.txt' : runtime_path() . 'xdebug/' . date('Ymd') . "_{$suffix}" . '.txt';
        }
        file_put_contents($file, "[" . date('Y-m-d H:i:s') . "] " . "========================= {$type} ===========================" . PHP_EOL, FILE_APPEND);
        $str = (is_string($data) ? $data : ((is_array($data) || is_object($data)) ? print_r($data, true) : var_export($data, true)) . PHP_EOL);
        $force ? file_put_contents($file, $str) : file_put_contents($file, $str, FILE_APPEND);
    }
}

if (!function_exists('sysconfig')) {

    /**
     * 获取系统配置信息
     * @param $group
     * @param null $name
     * @return array|mixed
     */
    function sysconfig($group, $name = null)
    {
        $where = ['group' => $group];
        $value = empty($name) ? Cache::get("sysconfig_{$group}") : Cache::get("sysconfig_{$group}_{$name}");
        if (empty($value)) {
            if (!empty($name)) {
                $where['name'] = $name;
                $value = \app\admin\model\SystemConfig::where($where)->value('value');
                Cache::tag('sysconfig')->set("sysconfig_{$group}_{$name}", $value, 3600);
            } else {
                $value = \app\admin\model\SystemConfig::where($where)->column('value', 'name');
                Cache::tag('sysconfig')->set("sysconfig_{$group}", $value, 3600);
            }
        }
        return $value;
    }
}

if (!function_exists('array_format_key')) {

    /**
     * 二位数组重新组合数据
     * @param $array
     * @param $key
     * @return array
     */
    function array_format_key($array, $key)
    {
        $newArray = [];
        foreach ($array as $vo) {
            $newArray[$vo[$key]] = $vo;
        }
        return $newArray;
    }

}

if (!function_exists('auth')) {

    /**
     * auth权限验证
     * @param $node
     * @return bool
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\DbException
     * @throws \think\db\exception\ModelNotFoundException
     */
    function auth($node = null)
    {
        $authService = new AuthService(session('admin.id'));
        $check = $authService->checkNode($node);
        return $check;
    }

}