<?php

namespace addons\unishop\model;


use think\Cache;
use think\Model;

class Config extends Model
{
    // 表名
    protected $name = 'unishop_config';

    // 开启自动写入时间戳字段
    protected $autoWriteTimestamp = 'int';

    // 定义时间戳字段名
    protected $createTime = 'createtime';
    protected $updateTime = 'updatetime';


    /**
     * 获取系统配置
     * @param $name
     * @return mixed|\think\db\Query
     */
    public static function getByName($name)
    {
        if (Cache::has('configGetByName_'. $name)) {
            $config = Cache::get('configGetByName_'. $name);
        } else {
            $config = parent::__callStatic('getByName', [$name]);
            $expire = self::__callStatic('getByName', ['cache_expire'])['value'];
            Cache::set('configGetByName_'. $name, $config, $expire);
        }
        return $config;
    }

    /**
     * 判断当前是不是使用悲观锁
     * @return bool
     */
    public static function isPessimism()
    {
        return self::getByName('lock')['value'] == 'pessimism' ? true : false;
    }

    /**
     * 获取图片完整连接
     */
    public static function getImagesFullUrl($value = '')
    {
        if (stripos($value, 'http') === 0 || $value === '' || stripos($value, 'data:image') === 0) {
            return $value;
        } else {
            $upload = \think\Config::get('upload');
            if (!empty($upload['cdnurl'])) {
                return  $upload['cdnurl'] . $value;
            } else {
                return self::getHttpLocation() . $value;
            }
        }
    }

    /**
     * 获取当前地址
     * @return string
     */
    public static function getHttpLocation() {
        $http_type = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')) ? 'https://' : 'http://';
        return $http_type . $_SERVER['HTTP_HOST'];
    }

    /**
     * 时间戳 - 精确到毫秒
     * @return float
     */
    public static function getMillisecond() {
        list($t1, $t2) = explode(' ', microtime());
        return (float)sprintf('%.0f',(floatval($t1)+floatval($t2))*1000);
    }
}
