<?php
/**
 * Option.php UTF-8
 * Option
 *
 * @date    : 2018/5/4 19:33
 *
 * @license 这不是一个自由软件,未经授权不许任何使用和传播。
 * @author  : wuyonghong <wyh@huosdk.com>
 * @version : HUOSDK 8.0
 */

namespace huo\controller\wap;

use h5wap\wap\controller\GameController;
use h5wap\wap\controller\NewsController;
use huo\controller\common\Base;
use huo\controller\game\CategoryCache;
use huo\controller\game\Game;
use huo\controller\game\GameCache;
use huo\controller\gift\GiftCache;
use huo\logic\posts\PostsLogic;
use huolib\constant\OptionConst;

class Option extends Base {
    /**
     * 获取配置值
     *
     * @param string $option_name   配置名
     * @param int    $autoload      是否自动加载 1是  0否
     * @param bool   $auto_add      是否自动添加
     * @param string $auto_add_data 自动添加配置值
     *
     * @return array
     */
    public function getOptionData($option_name = '', $autoload = 1, $auto_add = false, $auto_add_data = '') {
        if (empty($option_name)) {
            return null;
        }
        $option_name = trim($option_name);
        $_option_data = OptionCache::ins()->getInfoByOptionName($option_name, $autoload, $auto_add, $auto_add_data);

        return $_option_data;
    }

    /**
     * 保存配置值
     *
     * @param string $option_name
     * @param string $option_value
     *
     * @return bool|string
     */
    public function saveOptionData($option_name = '', $option_value = '') {
        if (empty($option_name)) {
            return '';
        }
        $option_name = trim($option_name);

        return OptionCache::ins()->updateOption($option_name, $option_value);
    }

    public function getValue($option_name) {
        if (empty($option_name)) {
            return '';
        }
        $option_name = trim($option_name);
        $_data = OptionCache::ins()->getInfoByOptionName($option_name);
        if (!empty($_data) && !empty($_data['option_value'])) {
            $_data = json_decode($_data['option_value'], true);
        }

        return $_data;
    }

    /**
     * 获取网站seo优化内容
     *
     * @param $option_name
     * @param $game_id
     * @param $gift_id
     * @param $news_id
     *
     * @return array|bool|mixed|string
     */
    public function getSeoValue($option_name, $game_id = 0, $gift_id = 0, $news_id = 0) {
        $_data = $this->getValue($option_name);
        if (empty($_data)) {
            return array();
        }
        $_data['title'] = $this->replaceSeoValue($_data['title'], $game_id, $gift_id, $news_id);
        $_data['keyword'] = $this->replaceSeoValue($_data['keyword'], $game_id, $gift_id, $news_id);
        $_data['description'] = $this->replaceSeoValue($_data['description'], $game_id, $gift_id, $news_id);

        return $_data;
    }

    /**
     * 统一替换seo优化中的变量
     *
     * @param $value
     * @param $game_id
     * @param $gift_id
     * @param $news_id
     *
     * @return mixed
     */
    private function replaceSeoValue($value, $game_id = 0, $gift_id = 0, $news_id = 0) {
        if (strpos($value, OptionConst::SEO_REPLACE_WEBNAME) !== false) {
            $_wap_basic = $this->getValue(OptionConst::WAP_BASIC);
            if (!empty($_wap_basic)) {
                $_site_title = $_wap_basic[OptionConst::WAP_BASIC_SITE_NAME];
                if (!empty($_site_title)) {
                    $value = str_replace(OptionConst::SEO_REPLACE_WEBNAME, $_site_title, $value);
                }
            }
        }
        if (!empty($game_id)) {
            $_game_cache = GameCache::ins();
            $_game_data = $_game_cache->getInfoByAppId($game_id);
            if (!empty($_game_data)) {
                if (strpos($value, OptionConst::SEO_REPLACE_GAMENAME) !== false) {
                    $_name = isset($_game_data['gamename']) ? $_game_data['gamename'] : $_game_data['name'];
                    $value = str_replace(OptionConst::SEO_REPLACE_GAMENAME, $_name, $value);
                }
                if (strpos($value, OptionConst::SEO_REPLACE_GAMETYPE) !== false) {
                    $_category_name = CategoryCache::ins()->getNameByIds(2, $_game_data['category']);
                    if (is_array($_category_name) && count($_category_name)) {
                        $_category_name = $_category_name[0];
                    }
                    if (!empty($_category_name)) {
                        $value = str_replace(OptionConst::SEO_REPLACE_GAMETYPE, $_category_name, $value);
                    }
                }
            }
        }
        if (strpos($value, OptionConst::SEO_REPLACE_GIFTNAME) !== false) {
            if (!empty($gift_id)) {
                $_gift_data = GiftCache::ins()->getInfoByGiftId($gift_id);
                if (!empty($_gift_data)) {
                    $value = str_replace(OptionConst::SEO_REPLACE_GIFTNAME, $_gift_data['title'], $value);
                }
            }
        }
        if (strpos($value, OptionConst::SEO_REPLACE_NEWSNAME) !== false) {
            if (!empty($news_id)) {
                $_news_data = (new PostsLogic())->getDetail($news_id);
                if (!empty($_news_data)) {
                    $value = str_replace(OptionConst::SEO_REPLACE_NEWSNAME, $_news_data['title'], $value);
                }
            }
        }

        return $value;
    }

    public function getValues($option_names) {
        if (empty($option_names) || !is_array($option_names)) {
            return '';
        }
        $_data = Array();
        foreach ($option_names as $option_name) {
            if (empty($_data)) {
                $_data[$option_name] = $this->getValue($option_name);
            }
        }

        return $_data;
    }
}