<?php


namespace api\modules\v1\controllers;


use api\common\controllers\Controller;
use common\helpers\CodeImgGenerate;
use common\helpers\Util;
use common\modules\config\models\Config;
use common\models\Survey;
use common\models\SurveyNew;
use Yii;
use yii\helpers\ArrayHelper;
use api\common\behaviors\QueryParamAuth;
use yii\captcha\CaptchaAction;
use common\enums\CodeEnum;
use common\models\Policy;

class SurveyController extends Controller {

    public function behaviors()
    {
        return ArrayHelper::merge(parent::behaviors(), [
            [
                'class' => QueryParamAuth::className(),
                'tokenParam' => 'token',
                'optional' => ['index','submit','enterprise','captcha']
            ]
        ]);
    }
    
    
    public function actionCaptcha()
    {
        $CodeImgGenerate = new CodeImgGenerate(\Yii::$app->controller->id,\Yii::$app->controller);
        $codeInfo = $CodeImgGenerate->inline();                  // 验证码二进制流
        header("Content-type: image/png");                       // 输出图片
        exit($codeInfo);
    }

    /**
     * @api {get} /v1/survey 列表
     * @apiVersion 1.0.0
     * @apiName index
     * @apiGroup Survey
     *
     *
     */
    public function actionIndex()
    {
        $type = request()->get('type');
        if(empty($type)) $type = 'industry';
        
        $lists = ArrayHelper::toArray(Config::find()->select(['name','value','extra','description','type'])->where(['group' => $type])->all());

		foreach ($lists as &$value) {
			$value['value'] = explode("\r\n",$value['extra']);

			foreach($value['value'] as &$val){
				$val = trim($val);
			}


			unset($value['extra']);
        }

        return ['data' => $lists];
    }

	public function actionEnterprise()
    {
		$params = request()->post();
  
       
// 		$params = [
// 			'name'=>'企业名称1',
// 			'address'=>'企业注册地',
// 			'estdate'=>'2023-10-23',
// 			'busAddress'=>'企业实际经营地',
// 			'propertyNumber'=>1, //企业有效l类知识产权数
// 			'propertyNumber2'=>2, //有效、高企认定中未使用过的II类知识产权数
// 			'propertyMode'=>1, //知识产权获取方式 1:自主研发 2:仅有受让、受赠和并购等
//  			'isStandard'=>0, //企业参与编制国家标准、行业标准、检测方法、技术规范的情况  1:是 0:否
// 			'achievementNumber'=>1, //科技成果数,

// 			'manageLevel1'=>1, //定制了企业研究开发组织管理制度
// 			'manageLevel2'=>1, //建立了研发投入核算体系
// 			'manageLevel3'=>1,  //编制了研发费用辅助帐
// 			'manageLevel4'=>1,  //设立了内部科技技术研究开发机构并具备相应的科研条件
// 			'manageLevel5'=>1,  //与国内外研究开发机构开展多种形式的产学研合作
// 			'manageLevel6'=>1,  //建立了科技成果转化的组织实施与激励奖励制度
// 			'manageLevel7'=>1,  //建立开放式的创新创业平台
// 			'manageLevel8'=>1,  //建立了科技人员的培养进修制度
//             'manageLevel9'=>1,  //建立了职工技能培训制度
            
// 			'netAssets1'=>111, //第1年   净资产
// 			'netAssets2'=>222, //第2年   净资产
// 			'netAssets3'=>333, //第3年   净资产
// 			'saleRevenue1'=>444, //第1年  销售收入
// 			'saleRevenue2'=>555, //第2年  销售收入
// 			'saleRevenue3'=>666 //第3年  销售收入
// 		];
        
        //知识产权数量
        $numberScore = 0;
        if($params['propertyNumber2'] == 1 || $params['propertyNumber2'] == 2) $numberScore = 2;
        if($params['propertyNumber2'] == 3 || $params['propertyNumber2'] == 4) $numberScore = 4;
        if($params['propertyNumber2'] >= 5) $numberScore = 6;
        if($params['propertyNumber'] > 1) $numberScore = 8;
        
        //知识产权获得方式
        $modeScore = 0;
        if($params['propertyMode'] == 1) $numberScore = 6;
        if($params['propertyMode'] == 2) $numberScore = 3;
        
        //企业参与编制国家标准、行业标准、检测方法、技术规范的情况
        $standardScore = 0;
        if($params['isStandard'] == 1) $standardScore = 2;
        
        //科技成果转化能力
        $techniquesAchieveScore = 0;
        if($params['achievementNumber'] == 1) $techniquesAchieveScore = 6;
        if($params['achievementNumber'] == 2) $techniquesAchieveScore = 12;
        if($params['achievementNumber'] == 3) $techniquesAchieveScore = 18;
        if($params['achievementNumber'] == 4) $techniquesAchieveScore = 25;
        if($params['achievementNumber'] >= 5) $techniquesAchieveScore = 30;
        
        //研究开发组织管理水平
        $manageLevelScore = 0;
        if($params['manageLevel1'] == 1) $manageLevelScore += 2;
        if($params['manageLevel2'] == 1) $manageLevelScore += 2;
        if($params['manageLevel3'] == 1) $manageLevelScore += 2;
        if($params['manageLevel4'] == 1) $manageLevelScore += 3;
        if($params['manageLevel5'] == 1) $manageLevelScore += 3;
        if($params['manageLevel6'] == 1) $manageLevelScore += 2;
        if($params['manageLevel7'] == 1) $manageLevelScore += 2;
        if($params['manageLevel8'] == 1) $manageLevelScore += 2;
        if($params['manageLevel9'] == 1) $manageLevelScore += 2;
        
        //净资产增长率
        $growthRate = (0.5 * ($params['netAssets2'] / $params['netAssets1'] + $params['netAssets3'] / $params['netAssets2']) - 1) * 100;
        
        $growthRateScore = 0;
        if($growthRate > 0) $growthRateScore = 2;
        if($growthRate > 5) $growthRateScore = 4;
        if($growthRate > 10) $growthRateScore = 6;
        if($growthRate > 20) $growthRateScore = 9;
        
        //销售收入增长率
        $saleRate = (0.5 * ($params['saleRevenue2'] / $params['saleRevenue1'] + $params['saleRevenue3'] / $params['saleRevenue2']) - 1) * 100;
        
        $saleRateScore = 0;
        if($saleRate > 0) $saleRateScore = 2;
        if($saleRate > 10) $saleRateScore = 4;
        if($saleRate > 20) $saleRateScore = 6;
        if($saleRate > 30) $saleRateScore = 7;
        
        
		$result = [ 
			'totalScore'=>8 + 8 + $numberScore + $modeScore + $standardScore +  $numberScore + $modeScore + $standardScore + $techniquesAchieveScore + $manageLevelScore + $growthRateScore + $saleRateScore, //企业评测总得分
			'basic'=>[
				'name'=>$params['name'],
				'address'=>$params['address'],
				'estdate'=>$params['estdate'],
				'busAddress'=>$params['busAddress'],
				'propertyNumber'=>$params['propertyNumber'],
				'propertyNumber2'=>$params['propertyNumber2'],
				'propertyMode'=>$params['propertyMode'],
				'isStandard'=>$params['isStandard'],
				'achievementNumber'=>$params['achievementNumber'],
			],
			'knowledgeVo'=>[
				'knowledgeTotalScore'=>$numberScore + $modeScore + $standardScore + 8 + 8, //知识产权
				'techniquesScore'=>8, //技术的先进程度  
				'effectScore'=>8, //对主要产品(服务)在技术上发挥核心支持作用(8分)
				'numberScore'=>$numberScore, //知识产权数量
				'modeScore'=>$modeScore, //知识产权获得方式
				'standardScore'=>$standardScore  //企业参与编制国家标准、行业标准、检测方法、技术规范的情况
			],
			'techniquesAchieveScore'=>$techniquesAchieveScore, //科技成果转化能力
			'manageLevelScore'=>$manageLevelScore,  //研究开发组织管理水平
			'enterpriseGrowthVo'=>[
				'totalScore'=>$growthRateScore + $saleRateScore, //企业成长性
				'growthRateScore'=>$growthRateScore, //净资产增长率得分
				'saleRateScore'=>$saleRateScore, //销售收入增长率得分
				
			]
		];
	
        return ['data' => $result];
    }

	public function actionSubmit()
    {
		
		$data = request()->post();
		$type = request()->post('type');
        if(empty($type)) $type = 'industry';
        
		$survey = ArrayHelper::toArray(SurveyNew::find()->where(['type' => $type])->all());

        $captcha = new CodeImgGenerate(\Yii::$app->controller->id,\Yii::$app->controller);

        $result = $captcha->validate($data['code']);

         if(!$result){
             return ['errcode' => CodeEnum::CODE_ERROR, 'errmsg' => '验证码错误'];
         }

        $selects = ArrayHelper::toArray(Config::find()->where(['group' => 'industry','type' => 'select'])->all());

		$list = [];

		if($type == 'special'){
            foreach ($survey as $key=>$value) {
                $filter = explode(';',$value['filter']);//先判断第一层and关系
                $is_match = [];

                foreach ($filter as $key1 => $value1){
                    if(!empty($value1)){
                        if(strpos($value1,'|') !== false){//如果有存在判断大小
                            $filter2 = explode('|',$value1);
                            if($value['id'] == 1144 && $filter2[0] == 'shebao'){
                                var_dump($data , $filter2[2]);die;
                            }
                            if(array_key_exists($filter2[0],$data) && !empty($data[$filter2[0]]) && $data[$filter2[0]] != '请选择'){
                                switch ($filter2[1]){
                                    case '>=':

                                        if($data[$filter2[0]] >= $filter2[2]){
                                            $is_match[$key1] = true;
                                        }else{
                                            $is_match[$key1] = false;
                                            continue 2;
                                        }
                                        break;
                                    case '=':
                                        if($data[$filter2[0]] == $filter2[2]){
                                            $is_match[$key1] = true;
                                        }else{
                                            $is_match[$key1] = false;
                                            continue 2;
                                        }
                                        break;
                                    case '<=':
                                        if($data[$filter2[0]] <= $filter2[2] && $data[$filter2[0]] > 0){
                                            $is_match[$key1] = true;
                                        }else{
                                            $is_match[$key1] = false;
                                            continue 2;
                                        }
                                        break;
                                    case 'in':
                                        $arr = explode(',',$filter2[2]);

                                        if(in_array($data[$filter2[0]],$arr)){
                                            $is_match[$key1] = true;
                                        }else{
                                            $is_match[$key1] = false;
                                            continue 2;
                                        }
                                        break;
                                }
                            }else{
                                $is_match[$key1] = false;
                                continue 2;
                            }
                        }
                    }
                }
                $match_count = 0;
                foreach ($is_match as $v){
                    if($v){
                        $match_count++;
                    }
                }
                if($match_count == count($filter)){
                    $list[] = [
                        'id'=>$value['id'],
                        'title'=>$value['title'],
                        'content'=>$value['content'],
                        'level' => $value['cengci']
                    ];
                }
            }
            var_dump($list);die;

            $cengci = [];
            $level = [];
            foreach($list as $k => $v){

                if(!in_array($v['level'],$level)){
                    $cengci[] = [
                        'id' => $v['id'],
                        'title' => $v['level'],
                        'content' => '',
                        'level' => $v['level'],
                        'policy' => []
                    ];
                    array_push($level,$v['level']);
                    $index = count($level) - 1;
                }else{
                    $index = array_search($v['level'],$level);
                }
                $zclist = Policy::find()->where(['type' => Policy::TYPE_SURVEY, 'estate' => $type,'title' => $v['title']])->andWhere(['like','cengci',"{$v['level']}"])->all();
                $cengci[$index]['policy'] = array_merge($cengci[$index]['policy'],$zclist);
            }

        }else{
            foreach ($survey as $key=>$value) {
                $filter = explode(';',$value['filter']);//先判断第一层and关系
                $is_match = [];
                foreach ($filter as $key1 => $value1){
                    if(!empty($value1)){
                        if(array_key_exists($value1,$data) && !empty($data[$value1]) && $data[$value1] != '请选择' && !in_array($value1,['shengte','shenga','quanyi','shengb','rencaileixing','zhuanyelingyunianxian'])){
                            if(strpos($value['title'],(string)$data[$value1]) === false){//如果用户提交的信息字眼有出现在政策条件内,相当于条件符合
                                $is_match[$key1] = false;
                                continue 2;
                            }else{
                                $is_match[$key1] = true;
                            }
                        }
                        if(strpos($value1,'-') !== false){//如果有存在或关系
                            $filter1 = explode('-',$value1);
                            $i = 0;
                            foreach ($filter1 as $key2 => $value2){
                                if(!in_array($value2,['shengte','shenga','quanyi','shengb','rencaileixing','zhuanyelingyunianxian'])){
                                    if(array_key_exists($value2,$data) && !empty($data[$value2]) && $data[$value2] != '请选择'){
                                        if(strpos($value['title'],(string)$data[$value2]) !== false){//如果用户提交的信息字眼有出现在政策条件内,相当于条件符合
                                            $i++;
                                        }
                                    }
                                }else{
                                    if(strpos($value2,'|') !== false){
                                        $filter3 = explode('|',$value2);
                                        if(array_key_exists($filter3[0],$data) && !empty($data[$filter3[0]]) && $data[$filter3[0]] != '请选择'){
                                            switch ($filter3[1]){
                                                case '>=':
                                                    if($data[$filter3[0]] >= $filter3[2]){
                                                        $i++;
                                                    }
                                                    break;
                                                case '=':
                                                    if($data[$filter3[0]] == $filter3[2]){
                                                        $i++;
                                                    }
                                                    break;
                                                case '<=':
                                                    if($data[$filter3[0]] <= $filter3[2] && $data[$filter3[0]] > 0){
                                                        $i++;
                                                    }
                                                    break;
                                            }
                                        }
                                    }
                                }
                            }
                            if($i == 0){
                                $is_match[$key1] = false;
                                continue 2;
                            }else{
                                $is_match[$key1] = true;
                            }
                        }
                        if(strpos($value1,'|') !== false){//如果有存在判断大小
                            $filter2 = explode('|',$value1);
                            if(array_key_exists($filter2[0],$data) && !empty($data[$filter2[0]]) && $data[$filter2[0]] != '请选择'){
                                switch ($filter2[1]){
                                    case '>=':
                                        if($data[$filter2[0]] >= $filter2[2]){
                                            $is_match[$key1] = true;
                                        }else{
                                            $is_match[$key1] = false;
                                            continue 2;
                                        }
                                        break;
                                    case '=':
                                        if($data[$filter2[0]] == $filter2[2]){
                                            $is_match[$key1] = true;
                                        }else{
                                            $is_match[$key1] = false;
                                            continue 2;
                                        }
                                        break;
                                    case '<=':
                                        if($data[$filter2[0]] <= $filter2[2] && $data[$filter2[0]] > 0){
                                            $is_match[$key1] = true;
                                        }else{
                                            $is_match[$key1] = false;
                                            continue 2;
                                        }
                                        break;

                                }
                            }else{
                                $is_match[$key1] = false;
                                continue 2;
                            }
                        }
                    }
                }
                $match_count = 0;
                foreach ($is_match as $v){
                    if($v){
                        $match_count++;
                    }
                }
                if($match_count == count($filter)){
                    switch ($value['cengci']){
                        case '1':
                            $level = '第一层次';
                            break;
                        case '2':
                            $level = '第二层次';
                            break;
                        case '3':
                            $level = '第三层次';
                            break;
                        case '4':
                            $level = '第四层次';
                            break;
                        case '5':
                            $level = '第五层次';
                            break;
                        case '6':
                            $level = '第六层次';
                            break;
                        case '7':
                            $level = '第七层次';
                            break;
                    }
                    $list[] = [
                        'id'=>$value['id'],
                        'title'=>$value['title'],
                        'content'=>$value['content'],
                        'level' => $level
                    ];
                }
            }


            foreach($list as $k => $v){
                $zclist = Policy::find()->where(['type' => Policy::TYPE_SURVEY, 'estate' => $type])->andWhere(['like','cengci',"{$v['level']}"])->all();
                $list[$k]['policy'] = $zclist;
            }

            //去重复
            $cengci = [];
            foreach ($list as $value) {
                if(isset($cengci[$value['level']])){
                    unset($value['level']);
                }else{
                    $cengci[$value['level']] = $value;
                }
            }
            $cengci = array_values($cengci);
        }


        return ['data' => $cengci];



    }

    /**
     * @api {get} /v1/category/id:\d+ 分类详情
     * @apiVersion 1.0.0
     * @apiName view
     * @apiGroup Category
     *
     */
    public function actionView($id)
    {
        $model = Category::find()->where(['id' => $id])->one();

        return ['data' => $model];
    }


}