<?php
// 游戏默认分成比例模板
namespace Admin\Controller;

class GameRatioMouldController extends AdminController
{
    public $admininfo;
    public $DBModel;
    public function _initialize()
    {
        $this->admininfo = $_SESSION['onethink_admin']['user_auth'];
        $this->DBModel = M("game_ratio_mould","tab_");
        parent::_initialize();
    }

    public function index()
    {
        $params = I('get.');
        $page = $params['p'] ? intval($params['p']) : 1;
        $row = $params['row'] ? intval($params['row']) : 10;
        
        //查询数据
        //获取游戏id
        $gamewhere['_string'] = '1 = 1';
        $where['_string'] = '1 = 1';
        if(isset($params['relation_game_id'])){
            $gamewhere['relation_game_id'] = $params['relation_game_id'];
            $where['m.relation_game_id'] = $params['relation_game_id'];
        }
        if(isset($params['game_type_id'])){
            $gamewhere['game_type_id'] = $params['game_type_id'];
        }
        if(isset($params['company_belong'])){
            $where['m.company_belong'] = $params['company_belong'];
        }
       $this->checkListOrCountAuthRestMap($where);
       $gameres  =  M("game","tab_")->field("tab_game.relation_game_id,tab_game.relation_game_name,IF(tab_game.original_package_name='','未配置',tab_game.original_package_name) original_package_name,tab_game_type.type_name game_type_name")->where($gamewhere)->join("tab_game_type on tab_game.game_type_id = tab_game_type.id")->group("tab_game.relation_game_id")->select(false);
       $dbres =  $this->DBModel->alias('m')->join("INNER JOIN ({$gameres}) g ON m.relation_game_id = g.relation_game_id")->where($where)->order('create_time desc, id desc');
       
        if(isset($params['export'])){
            $dbres = $dbres->select();
        }else{
            $dbres = $dbres->page($page, $row)->select();
        }

       foreach($dbres as $k=>&$v){
            $v['create_time'] = date("Y-m-d H:i:s",$v['create_time']);
            $v['company_belong'] ="下游".getCompanyBlong($v['company_belong']);
            $this->readTurnoverRatio($v);
       }
       $this->assign('data', $dbres);
       //判断导出
       if(isset($_REQUEST['export'])){
            $GetData = $_GET;
            unset($GetData['export']);
            addOperationLog(['op_type'=>3,'key'=>getNowDate(),'url'=>U(CONTROLLER_NAME.'/'.ACTION_NAME,$GetData),'menu'=>"推广员-推广员管理-游戏分成比例模板-导出"]);
            $this->display("export");
            exit();
        }
       $count = $this->DBModel->alias('m')->field("count(id) count")->join("INNER JOIN ({$gameres}) g ON m.relation_game_id = g.relation_game_id")->where($where)->find()['count'];
        $page = set_pagination($count, $row,$params);
        if($page) {
            $this->assign('_page', $page);
        }
        $this->assign('gameList', getAllGameList(true));
        $this->assign('gameTypeList', getGameTypes());
        $this->assign("company_belong",getCompanyBlong());
        $this->display();
    }

    public function add()
    {
        
        if ($_POST) {
            $params = I('post.');

            if (!isset($params['ratio']) || $params['ratio'] === '') {
                $this->error('默认分成比例不能为空');
            }
            $save['turnover_ratio'] = $this->setTurnoverRatio($params);
            $save['ratio'] = $params['ratio'] ?? 0;
            $save['relation_game_id'] = $params['relation_game_id'] ?? 0;
            $save['company_belong'] = $params['company_belong'] ?? 3;
            $save["admin_name"]=$this->admininfo["username"];
            $save["admin_id"]=$this->admininfo["uid"];
            $save["create_time"]=time();
            //判断是否存在
            $where = [
                "relation_game_id"=>$save['relation_game_id'],
                "company_belong"=>$save['company_belong']
            ];
            $hasdb =  $this->DBModel->field("count(id) count")->where($where)->find()['count'];
            if($hasdb > 0){
                $this->error('该游戏与该公司类型的模板已经存在,请搜索后编辑');
            }
            //保存
            $id = $this->DBModel->add($save);
            addOperationLog(['op_type'=>0,'key'=>$id,'op_name'=>'新增游戏分成比例模板','url'=>U('GameRatioMould/index')]);
            $this->ajaxReturn(["msg"=>"添加成功","code"=>1,"url"=>U("index")]);
        } else {
            $game_type = M("game_type","tab_")->field("id,type_name")->where("status=1")->select();
            $this->assign("game_type",$game_type);
            //渠道类型
            $this->assign("company_belong",getCompanyBlong());
            $this->display();
        }
    }
    public function edit()
    {
        if ($_POST) {
            $params = I('post.');
            if(!isset($params['id'])){
                $this->error('参数错误');
            }
            $save['ratio'] = $params['ratio'] ?? 0;
            $save['id'] = $params['id'];
            $save["create_time"]=time();
            $save['turnover_ratio'] = $this->setTurnoverRatio($params);

            $this->DBModel->save($save);
            addOperationLog(['op_type'=>1,'key'=>$save['id'],'op_name'=>'修改游戏分成比例模板','url'=>U('PromoteGameRatio/index')]);
            $this->ajaxReturn(["msg"=>"修改成功","code"=>1,"url"=>U("index")]);
        } else {
            $params = I('get.');
            $id = $params['id'] ?? 0;
            $id = intval($id);
            $map['id'] = $id;
            $gameres  =  M("game","tab_")->field("tab_game.relation_game_id,tab_game.relation_game_name,IF(tab_game.original_package_name='','未配置',tab_game.original_package_name) original_package_name,tab_game_type.type_name game_type_name")->join("tab_game_type on tab_game.game_type_id = tab_game_type.id")->group("tab_game.relation_game_id")->select(false);
            $dbres =  $this->DBModel->alias('m')->join("INNER JOIN ({$gameres}) g ON m.relation_game_id = g.relation_game_id")->where($map)->find();
            $dbres['turnover_ratio'] = $dbres['turnover_ratio'] ? json_decode($dbres['turnover_ratio'], true) : $dbres['turnover_ratio'];
            $dbres['company_belong'] = getCompanyBlong($dbres['company_belong']);
            $this->assign('data', $dbres);
            $this->display();
        }
    }
    public function del()
    {
        if(!isset($_REQUEST['id'])){
            $this->error('参数错误');
        }
        $id = $_REQUEST['id'];
        $res =  $this->DBModel->where("id='{$id}'")->delete();
        if($res !== false){
            addOperationLog(['op_type'=>2,'key'=>$id,'op_name'=>'删除游戏分成模板','url'=>U('PromoteGameRatio/index')]);

            $this->ajaxReturn(["msg"=>"删除成功","code"=>1,"url"=>U("index")]);
        }else{
            $this->error('删除错误');
        }
    }
    //基础信息获取
    public function getGames()
    {
        $gameTypeId = intval(I('game_type_id', 0));
        $games = M("game","tab_")->field("relation_game_id,relation_game_name,original_package_name")->where("game_type_id = '{$gameTypeId}'")->group("relation_game_name")->select();
        $this->ajaxReturn($games);
    }
    public function error($data)
    {
        header('Content-Type:application/json; charset=utf-8');
        $data =json_encode(['msg'=>$data,"code"=>4000],JSON_UNESCAPED_UNICODE);
        exit($data);
    }
    public function setTurnoverRatio($params)
    {
        $save['turnover_ratio'] = [];
        if (!empty(array_filter($params['turnover'])) || !empty(array_filter($params['turnover_ratio'])) ) {
            if (is_array($params['turnover']) && is_array($params['turnover_ratio']) && is_array($params['instanceof'])) {
                foreach ($params['turnover'] as $turnover) {
                    if (empty($turnover)) {
                        $this->error('月流水不能为空');
                    }
                }
                foreach ($params['turnover_ratio'] as $turnoverRatio) {
                    if (empty($turnoverRatio)) {
                        $this->error('月流水分成比例不能为空');
                    }
                }
                foreach ($params['instanceof'] as $intervalClosedStatus) {
                    if (!in_array($intervalClosedStatus, [1, 2])) {
                        $this->error('月流水分符号不能为空');
                    }
                }
                $turnoverCount = count($params['turnover']);
                $sortTurnover = $params['turnover'];
                sort($sortTurnover);
                if ($params['turnover'] != $sortTurnover || $turnoverCount != count(array_unique($params['turnover']))) {
                    $this->error('月流水必须以正序的方式填写,且必须大于上一个月流水');
                }
                $ratio = $params['ratio'] ?? 0;
                // if ($params['turnover_ratio'][0] <= $ratio) {
                //     $this->error('月流水分成比例必须大于默认分成比例');
                // }
                $turnoverRatioCount = count($params['turnover_ratio']);
                $sortTurnoverRatio = $params['turnover_ratio'];
                sort($sortTurnoverRatio);
                // if ($params['turnover_ratio'] != $sortTurnoverRatio || $turnoverRatioCount != count(array_unique($params['turnover_ratio']))) {
                //     $this->error('月流水分成比例必须以正序的方式填写,且必须大于上一个月流水分成比例');
                // }

                foreach ($params['turnover'] as $key => $turnover) {
                    $save['turnover_ratio'][] = [
                        'turnover' => bcdiv($turnover, 1, 2),
                        'ratio' => bcdiv($params['turnover_ratio'][$key], 1, 2),
                        'instanceof' => (isset($params['instanceof'][$key]) ? $params['instanceof'][$key] : 1),
                    ];
                }
                $save['turnover_ratio'] = json_encode($save['turnover_ratio']);
            }
        }
        return $save['turnover_ratio'];
    }
    //设置比例阶梯
    protected function readTurnoverRatio(&$v){
        $turnover_ratio = json_decode($v['turnover_ratio'],true);
        $v['turnover_ratio'] = array(
            array("ratio"=>$v['ratio']."%","name"=>"默认比例")
        );
        
        foreach($turnover_ratio as $ke=>$va){
            $t=array("ratio"=>$va["ratio"]."%");
            if(array_key_exists("instanceof",$va)){
                //存在
                if($va['instanceof']=='1'){
                    $t['name']="月流水≥".$va['turnover'];
                }else{
                    $t['name']="月流水>".$va['turnover'];
                }
            }else{
                $t['name']="月流水≥".$va['turnover'];
            }
            $v['turnover_ratio'][]=$t;
        }
        $v['row'] = count($v['turnover_ratio']);
    }

    
}