<?php
/**
 * SdkPluginCache.php  UTF-8
 * SDK更新缓存
 *
 * @date    : 2018/6/1 14:32
 *
 * @license 这不是一个自由软件,未经授权不许任何使用和传播。
 * @author  : chenbingling <cbl@huosdk.com>
 * @version : HUOSDK 8.0
 */

namespace huo\controller\app;
use huo\controller\common\Base;
use huo\logic\app\SdkPluginConfLogic;
use huo\model\app\SdkPluginConfModel;
use think\Cache;

class SdkPluginCache extends Base {
    public static function ins() {
        return new static();
    }
    protected $cache_tag  = 'sdk_plugin_name';
    /**
     * 获取插件KEY
     *
     * @param string $client_id
     *
     * @return string
     */
    private function getPluginKey($client_id) {
        return 'plugin_client_id_key_'.$client_id;
    }

    /**
     * 获取插件列表
     *
     * @param string client_id
     *
     * @return array|bool|mixed
     * @throws \think\Exception
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function getInfoByClient($client_id) {
        $_key = $this->getPluginKey($client_id);
        $_plugin_data_json = Cache::get($_key);
        $_plugin_data = json_decode($_plugin_data_json, true);
        if(!is_array($_plugin_data)){
            $_plugin_data = $_plugin_data_json;
        }
        if (!is_array($_plugin_data) || empty($_plugin_data)) {
            $_plugin_data = (new SdkPluginConfLogic())->getPluginByClientId($client_id);
            if (empty($_plugin_data)) {
                return false;
            }
            $this->savePluginsCache($client_id, $_plugin_data);
        }

        return $_plugin_data;
    }

    /**
     * 保存插件cache 数据
     *
     * @param     $client_id
     * @param     $_plugin_data
     * @param int $ttl
     */
    public function savePluginsCache($client_id, $_plugin_data, $ttl = 3600) {
        $_key = $this->getPluginKey($client_id);
        Cache::tag($this->cache_tag)->set($_key, json_encode($_plugin_data), $ttl);
    }

    /**
     * 更新插件信息
     *
     * @param $param
     * @param $_map
     *
     * @return SdkPluginConfModel
     */
    public function updateSdkPlugin($param, $_map) {
        Cache::clear($this->cache_tag);
        return (new SdkPluginConfModel())->update($param, $_map, true);
    }
}