<?php
namespace model;
use \model;
use \model\check;
use \model\collocation;
use model\pro\rule;

class tgbrand extends model
{

	public function getList($params, $rules = [])
	{
		$filters = $params['filters'];
		$page = $params['page'];
		$pagesize = $params['rows'];
		$sidx = empty($params['sidx'])? 'tb_seq,tb_id': $params['sidx'];
		$sord = empty($params['sord'])? 'asc': $params['sord'];
		$orderby = $params['orderby'];

		$table = 'tag_brand(tb)';
		$join = [
			"[>]adm_user(au)" => ["tb.tb_opuser" => "au_id"],
			"[>]pro_rule_link(prl)" => ["tb.tb_id" => "prl_val_id", "AND" => "prl.prl_type='brand' AND prl.prl_pb_id=1"]
		];
        $where = $this->filter2medoo($filters,function(&$field,&$op,&$data){
			
        });
		
		if(!empty($params['keys'])) $where['tb_id'] = explode(',', $params['keys']);
        if(!empty($params['query'])) $where['tb_'.LG_NAME.'[~]'] = $params['query'];
        $where = $this->listWhere($where,$page,$pagesize,$sidx,$sord,$orderby);
		if($page>0 && $pagesize>0){
			$fields = '*';
			$pages = $this->paging($table,$join,$fields,$where,$page,$pagesize);
			$where["LIMIT"] = [$pages['limit'],$pagesize];
		}

		$fields = '*';
        $arr = $this->db->select($table,$join,$fields,$where);
		if(!empty($arr)){

            $tbarr = array_column($arr,'tb_id');
            $barr = [];
            $join = [
                '[><]m_cn_model(mm)'=>['tbc.tbm_brand_id'=>'brand_id']
            ];
            $brand = $this->db->select('tag_brand_cnbrand(tbc)',$join,['tbc.tbm_tb_id','mm.brand_name'],['tbc.tbm_tb_id'=>$tbarr,'GROUP'=>['tbm_tb_id','brand_id']]);

            foreach ($brand as $key => $val) {
                $barr[$val['tbm_tb_id']][] = $val['brand_name'];
            }
            $marr = [];
            $join = [
                '[><]m_make(mm)'=>['tbm.tbm_mk_id'=>'mk_id']
            ];
            $make = $this->db->select('tag_brand_make(tbm)',$join,['tbm.tbm_tb_id','mm.mk_'.LG_NAME.'(mk_name)'],['tbm.tbm_tb_id'=>$tbarr]);
			foreach ($make as $key => $val) {
                $marr[$val['tbm_tb_id']][] = $val['mk_name'];
            }
            foreach($arr as &$v){
                $v['prl_code_a'] = $v['prl_code_a'] ?: '';
				$v['captions'] = [
                    'brand_id'=>$barr[$v['tb_id']]?implode(',',$barr[$v['tb_id']]):'',
                    'mk_id'=>$marr[$v['tb_id']]?implode(',',$marr[$v['tb_id']]):'',
					'tb_opuser'=>$v['au_name']
				];
			}
		}

		$data = [
			'page'=> $page,
			'total'=> $pages['total'],
			'records' => $pages['records'],
			'rows' => $arr
		];
		return $data;
	}

    public function saveData($params)
    {
        if($params['tb_id']){
            $tb_id = $this->db->get('tag_brand','tb_id',['tb_id'=>$params['tb_id']]);
        }
        $data = [
            'tb_seq'=>$params['tb_seq'],
            'tb_opuser'=>getOpuser(),
            'tb_update_time'=>getNowTime(),
        ];
		if(isset($params['tb_from_ids'])) $data['tb_from_ids'] = $params['tb_from_ids'];
        $data = langGetVals($data,$params,['tb_'=>'tb_']);
        //多语言
        $ruleArr = $params['rule']?:[];
        $this->db->Begin();
        if($tb_id){
            $this->db->update('tag_brand',$data,['tb_id'=>$tb_id]);
        }else{
            $data['tb_create_time'] = getNowTime();
            $this->db->insert('tag_brand',$data);
            $tb_id = $this->db->id();
        }
        //编码规则
        $rule = new rule();
        $rule->saveCateRuleById($tb_id,$ruleArr,'brand');
        //中国汽车品牌
        $old_brand = $this->db->select('tag_brand_cnbrand','tbm_brand_id',['tbm_tb_id'=>$tb_id]);
        $brand_id = explode(',',$params['brand_id']);
        $delArr = array_diff($old_brand,$brand_id);
        if($delArr){
            $this->db->delete('tag_brand_cnbrand',['tbm_brand_id'=>$delArr,'tbm_tb_id'=>$tb_id]);
        }
        $addArr = array_diff($brand_id,$old_brand);
        if($addArr){
            foreach ($addArr as $val) {
                $this->db->insert('tag_brand_cnbrand',['tbm_brand_id'=>$val,'tbm_tb_id'=>$tb_id]);
            }
        }
        //国际汽车生产商
        $old_make = $this->db->select('tag_brand_make','tbm_mk_id',['tbm_tb_id'=>$tb_id]);
        $mk_id = explode(',',$params['mk_id']);

        $delArr = array_diff($old_make,$mk_id);
        if($delArr){
            $this->db->delete('tag_brand_make',['tbm_mk_id'=>$delArr,'tbm_tb_id'=>$tb_id]);
        }
        $addArr = array_diff($mk_id,$old_make);
        if($addArr){
            foreach ($addArr as $val) {
                $this->db->insert('tag_brand_make',['tbm_mk_id'=>$val,'tbm_tb_id'=>$tb_id]);
            }
        }
        $this->db->End();
        return $tb_id;
    }

	//删除
	public function delData($idArr)
	{
		if(empty($idArr) || !is_array($idArr)) return [];

        //汽车品牌是否被引用
        $join = [
            '[>]oe_tag_brand'=>['tb_id'=>'otb_tb_id'],
            '[>]pro_tag_brand'=>['tb_id'=>'ptb_tb_id']
        ];
        $arr = $this->db->select('tag_brand',$join,['tb_id','otb_oe_id','ptb_p_id'],['tb_id'=>$idArr,'OR'=>['otb_tb_id[!]'=>null,'ptb_tb_id[!]'=>null]]);

        if($arr){
            return exitJson(1,'该品牌已被使用，请调整后再删除');
        }
		$this->db->Begin();
		
		$this->db->delete('tag_brand', ['tb_id'=>$idArr]);
        $this->db->delete('tag_brand_cnbrand', ['tbm_tb_id'=>$idArr]);
		$this->db->delete('tag_brand_make', ['tbm_tb_id'=>$idArr]);
		$this->db->End();
		return [];
	}

	
	//编辑
	public function setCell($kid, $setArr)
	{
		if(!empty($kid) && !empty($setArr))
		{
			$ignoreFileds = ['pbe_pb_id', 'pbe_type'];
			$old = $this->db->get('pro_brand_ext', '*', ['pbe_id'=>$kid]);
			if(empty($old)) exitJson('记录不存在');

			$this->db->Begin();
			foreach($setArr as $filed=>$val){
				if(in_array($filed, $ignoreFileds) || stripos($filed, 'pbe_') !== 0){
					unset($setArr[$filed]);
					continue;
				}
			}
			if(!empty($setArr)){
				$opuser = getOpuser();
				$datetime = getNowTime();
				$setArr['pbe_opuser'] = $opuser;
				$setArr['pbe_update_time'] = $datetime;
				if(isset($setArr['pbe_val'])){
					$exists = $this->db->get('pro_brand_ext', 'pbe_id', ['pbe_pb_id'=>$old['pbe_pb_id'], 'pbe_type'=>$old['pbe_type'], 'pbe_val'=>$setArr['pbe_val'], 'pbe_id[!]'=>$kid]);
					if(!empty($exists)) exitJson('记录已存在');
				}
				$this->db->update('pro_brand_ext', $setArr, ['pbe_id'=>$kid]);
			}
			$this->db->End();
		}
		return [];
	}

	public function getDetail($kid)
	{	
		
		$detail = $this->db->get('tag_brand', '*', ['tb_id'=>$kid]);
        if($detail)
        {
            $detail['brand_id'] = '';    
            $detail['brand_name'] = ''; 
            $join = [
                '[><]m_cn_model(mm)'=>['tbc.tbm_brand_id'=>'brand_id']
            ];
            $brand = $this->db->select('tag_brand_cnbrand(tbc)',$join,['tbc.*','mm.brand_name'],['tbc.tbm_tb_id'=>$kid,'GROUP'=>['brand_id']]);
            if($brand){
                $detail['brand_id'] = implode(',',array_column($brand,'tbm_brand_id'));    
                $detail['brand_name'] = implode(',',array_column($brand,'brand_name')); 
            }

            $join = [
                '[><]m_make(mm)'=>['tbm.tbm_mk_id'=>'mk_id']
            ];
            $make = $this->db->select('tag_brand_make(tbm)',$join,['tbm.*','mm.mk_'.LG_NAME.'(mk_name)'],['tbm.tbm_tb_id'=>$kid]);
            if($make){
                $detail['mk_id'] = implode(',',array_column($make,'tbm_mk_id'));    
                $detail['mk_name'] = implode(',',array_column($make,'mk_name')); 
            }
           
            //编码
            $detail['rule'] = [];
            $rule =$this->db->select('pro_rule_link',['prl_id','prl_pb_id','prl_val_id','prl_code_a','prl_code_b'],['prl_type'=>'brand','prl_val_id'=>$kid]);
            if($rule){
                foreach ($rule as $item) {
                    $detail['rule'][$item['prl_pb_id']] = $item; 
                }
            }
        } 
		return $detail;
	}

    /**
     * @method 获取未绑定的品牌数据
     * @author zhengweihua 
     * @copyright 2025-05-30
     */
    public function unbindStatistics()
    {   
        //国际车型
        $sql = 'SELECT mk_id, mk_cn_name, COUNT(DISTINCT oml_oe_id) poe_count FROM `oe_model_link` 
        JOIN `m_model` ON mm_id = oml_mm_id
        JOIN `m_make` ON mk_id = mm_mk_id
        WHERE mm_mk_id NOT IN (
        SELECT tbm_mk_id FROM `tag_brand_make`
        ) GROUP BY mm_mk_id';
        $data = $this->db->query($sql)->fetchAll();
        
        array_multisort(array_column($data, 'poe_count'), SORT_DESC,$data);
        
        //中国车型
        $sql = 'SELECT brand_id, brand_name, COUNT(DISTINCT oml_oe_id) poe_count FROM `oe_model_cn_link` 
        JOIN `m_cn_model` ON mod3_id = oml_mod3_id
        WHERE brand_id NOT IN (
        SELECT tbm_brand_id FROM `tag_brand_cnbrand`
        ) GROUP BY brand_id';

        $cndata = $this->db->query($sql)->fetchAll();

        array_multisort(array_column($cndata, 'poe_count'), SORT_DESC,$cndata);

        return ['model'=>$data, 'cnmodel'=>$cndata];
    }
}