<?php
/**
 * Created by PhpStorm.
 * User: leo
 * Date: 2018/2/24
 * Time: 下午12:48
 */
namespace frontendApi\modules\v1\controllers;

use common\helpers\Cache;
use common\helpers\snowflake\PageSnowFake;
use common\models\Ad;
use common\models\AdLocation;
use common\models\ArticleCategory;
use common\models\DecOrder;
use common\models\DecRole;
use Yii;
use frontendApi\modules\v1\models\User;

use common\helpers\parsedown\Parsedown;

class SiteController extends BaseController
{
    public $modelClass = User::class;

    /**
     * 请求服务器时间差
     * @return mixed
     * @throws \yii\web\HttpException
     */
    public function actionDaysDiff(){
        return static::notice(['daysDiff'=>Yii::$app->params['daysDiff']]);
    }

    /**
     * 获取广告
     * @return mixed
     * @throws \yii\web\HttpException
     */
    public function actionAd(){
        $lid = Yii::$app->request->get('lid');
        $adLocation = AdLocation::findUseSlaves()->where('ID=:ID', [':ID'=>$lid])->asArray()->one();
        $query = Ad::findUseSlaves()->select('ID,IMAGE,LID,TITLE,CONTENT,TYPE')->where('LID=:LID AND STATUS=1', [':LID'=>$lid])->orderBy('SORT ASC')->asArray();
        $data = [];
        if($adLocation['TYPE'] == AdLocation::TYPE_SLIDE){
            $data = $query->all();
        } elseif($adLocation['TYPE'] == AdLocation::TYPE_IMAGE) {
            $data = $query->one();
        }
        return static::notice($data);
    }

    /**
     * 请求手机基础信息
     * @return array
     */
    public function actionMobileBaseInfo(){
        // 会员级别
        $decLevels = Cache::getDecLevelConfig();
        // 聘级
        $empLevels = Cache::getEmpLevelConfig();
        // 时间差
        $daysDiff = Yii::$app->params['daysDiff'];
        // 钱包
        $shopWalletType = Yii::$app->params['shopWalletType'];
        return [
            'decLevels' => $decLevels,
            'empLevels' => $empLevels,
            'daysDiff' => $daysDiff,
            'shopWalletType' => $shopWalletType,
        ];
    }

    public function actions()
    {
        $actions = parent::actions();
        $actions['captcha'] = [
            'class' => 'common\helpers\CaptchaAction',
            'width' => 120,
            'height' => 40,
            'padding' => 0,
            'minLength' => 4,
            'maxLength' => 4,
            'offset'=>8,        //设置字符偏移量 有效果
            'testLimit'=>1,
        ];

        return $actions;
    }

    /**
     * 请求页面数据
     * @return mixed
     * @throws \yii\web\HttpException
     */
    public function actionPageData() {
        $pageId = PageSnowFake::instance()->generateId();
        return static::notice(['pageId'=>$pageId]);
    }

    /**
     * 请求基础信息
     * @return array
     */
    public function actionBaseInfo(){
        // 会员级别
        $decLevels = Cache::getDecLevelConfig();
        // 聘级
        $empLevels = Cache::getEmpLevelConfig();
        // 菜单
        $menu = require Yii::getAlias('@frontendApi/config/menu.php');
        // 获取全部文章分类
        $allArticleCategory = ArticleCategory::getAllCategory();
        foreach($allArticleCategory as $category){
            $menu['article']['child'][] = ['name'=>$category['CATE_NAME'], 'class'=>'', 'icon'=>'', 'controller'=>'article', 'action'=>'list', 'routePath'=>'article/list/'.$category['ID'], 'show'=>1,];
        }
        $menu = $this->_childMenu($menu);
        // 时间差
        $daysDiff = Yii::$app->params['daysDiff'];
        // 钱包
        $shopWalletType = Yii::$app->params['shopWalletType'];
        return [
            'decLevels' => $decLevels,
            'empLevels' => $empLevels,
            'menu' => $menu,
            'daysDiff' => $daysDiff,
            'shopWalletType' => $shopWalletType,
        ];
    }

    private function _childMenu($parentArray){
        $menuResult = [];
        foreach($parentArray as $key => $parentMenu){
            if($key !== 'article'){
                // 菜单是否显示
                if(isset($parentMenu['show']) && !$parentMenu['show']){
                    continue;
                }
                if($this->_teamworkChkMenu($parentMenu)){
                    continue;
                }
                if($this->_decChkMenu($parentMenu)){
                    continue;
                }
                // 查看是否有该控制器的权限
                if(isset($parentMenu['controller']) && $parentMenu['controller']){
                    if(!Yii::$app->user->validateUserController($parentMenu['controller'])) continue;
                }
                // 查看是否有权限
                if(isset($parentMenu['action']) && $parentMenu['action']){
                    if(!Yii::$app->user->validateUserAction($parentMenu['controller'], $parentMenu['action'])) continue;
                }
                // 子菜单同样设置
                if(isset($parentMenu['child']) && !empty($parentMenu['child'])){
                    $parentMenu['child'] = $this->_childMenu($parentMenu['child']);
                }
            }
            $menuResult[] = $parentMenu;
        }
        return $menuResult;
    }

    /**
     * 虚拟会员hz解决暂写死
     * @param $menu
     * @return bool
     */
    private function _teamworkChkMenu($menu){
        if (User::getEnCodeInfo(\Yii::$app->user->id)['IS_UNION']==1) {
            if(in_array($menu['routePath'],['dashboard/index','user','user/index','finance','finance/index','finance/period','finance/flow-bonus','finance/withdraw'])) return true;
        }
        return false;
    }

    /**
     * 报单中心显示菜单
     * @param $menu
     * @return bool
     */
    private function _decChkMenu($menu) {
        if(!isset($menu['allow'])){
            return false;
        }
        $isDecReg = Cache::getSystemConfig()['isDecReg']['VALUE'];
        if(!$isDecReg) return false;

        $isDec = User::getEnCodeInfo(\Yii::$app->user->id)['IS_DEC'];
        if($isDec==1 && $menu['allow']=='declarer'){
            return false;
        }
        return true;

        $userInfo = User::getEnCodeInfo(\Yii::$app->user->id);
//        if ($userInfo['IS_DEC'] != 1) {
//            if (in_array($menu['routePath'], ['bonus/flow-bt', 'bonus/trace-fl'])) return true;
//        }else {
//            $sysConfig = Cache::getSystemConfig();
//            if($menu['routePath'] == 'bonus/flow-bt' && !$sysConfig['openBT']['VALUE']&&!$sysConfig['openPROD']['VALUE']) return true;
//            if($menu['routePath'] == 'bonus/trace-fl' && !$sysConfig['openFL']['VALUE']) return true;
//            //查看是否有货补比例
//            $decRole = DecRole::find()->where('1=1')->indexBy('ID')->asArray()->all()[$userInfo['DEC_ROLE_ID']];
//            if ($menu['routePath'] == 'bonus/trace-fl' && $decRole['GOODS_SUBSIDY'] <= 0) return true;
//        }
        return false;
    }


    public function actionDoc(){
        $docCssPath = \Yii::$app->basePath.'/libs/doc/markdown.css';
        $treeCssPath = \Yii::$app->basePath.'/libs/doc/tree.css';
        $treeJsPath = \Yii::$app->basePath.'/libs/doc/tree.js';
        $docfilePath = \Yii::$app->basePath.'/libs/doc/shopApiReadMe.md';
        $docCssStyle = file_get_contents($docCssPath);
        $docContent = file_get_contents($docfilePath);
        $treeCssStyle= file_get_contents($treeCssPath);
        $treeJsPath= file_get_contents($treeJsPath);
        $parsedown = Parsedown::instance();
        $result = '<!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8">';
        $result .= '<script src="http://code.jquery.com/jquery-1.7.2.min.js"></script>';
        $result .= "<script>{$treeJsPath}</script>";
        $result .= "<style>{$treeCssStyle}</style>";
        $result .= "<style>{$docCssStyle}</style></head>";
        $result .= '<body><div class="markdown-body">';
        $result .= $parsedown->text($docContent);
        $result .= '</div></body></html>';
        print_r($result);
        exit();
    }

    /**
     * 站点设置
     * @return mixed
     * @throws \yii\web\HttpException
     */
    public function actionConfig() {
        $systemConfig = Cache::getSystemConfig();
        if ($systemConfig['siteClose']['VALUE']) {
            $siteCloseInfo = $systemConfig['siteCloseInfo']['VALUE'];
            return static::notice(['siteClose' => true, 'siteCloseInfo' => $siteCloseInfo]);
        }
        $siteTitle = $systemConfig['siteTitle']['VALUE'];
        return static::notice(['siteClose' => false, 'siteTitle' => $siteTitle]);
    }
}