<?php
namespace model\pack;
use \model;
use model\collocation;

class type extends model
{
	public $table = 'pack_type';
    public $key = 'pat_id';

	public function __construct ()
    {
		parent::__construct();
	}

    function getDb(){
	    return $this->db;
	}

    public function saveDetail($params)
    {   
        if(mb_strlen($params['pat_minseq'])!=5){
            exitJson('最小流水号长度为5位');
        }
        $data = [
            'pat_code'=>$params['pat_code']??'',
            'pat_spec'=>$params['pat_spec']??'',
            'pat_minseq'=>$params['pat_minseq']??'00000',
            'pat_size_unit'=>$params['pat_size_unit']??'',
            'pat_opuser'=>getOpuser(),
            'pat_update_time'=>getNowTime(),
        ];
        $data = langGetVals($data,$params,['pat_'=>'pat_']);
        
        if($params['pat_id']){
            $id = $this->db->get('pack_type','pat_id',['pat_id'=>$params['pat_id']]);
        } 
		$this->db->Begin();
        if($id){
            $this->db->update('pack_type',$data,['pat_id'=>$id]);
        }else{
            $data['pat_create_time'] = getNowTime();
            $this->db->insert('pack_type',$data);
            $id = $this->db->id();
        }

		$this->db->End();
		return $id;
    }

    public function getList($params, $rules = [])
	{
		$filters = $params['filters'];
		$page = $params['page'];
		$pagesize = $params['rows'];
		$sidx = empty($params['sidx'])? 'pat_code': $params['sidx'];
		$sord = empty($params['sord'])? 'asc': $params['sord'];
		$orderby = $params['orderby'];
		$this->joinWhere = [];
	
		$table = 'pack_type(pat)';
		$join = [
            '[>]adm_user(au)'=>['pat.pat_opuser'=>'au_id']
        ];
		
        $where = $this->filter2medoo($filters,function(&$field,&$op,&$data){

        });
		
		if(!empty($params['keys'])) $where['pat_id'] = explode(',', $params['keys']);
		if(!empty($params['pat_id'])) $where['pat_id'] = $params['pat_id'];
		
		if(!empty($this->joinWhere)){
			$where = array_merge($where, $this->joinWhere);
		}
        
        $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 = ['pat.*','au_name'];
        $arr = $this->db->select($table,$join,$fields,$where);
        if($arr)
        {   
            $oArr = $this->db->select('object',['o_id',LG_NAME.'(o_name)'],['o_parent_id'=>[2,1169]]);
			$oArr = array_column($oArr,'o_name','o_id');
            foreach($arr as &$v){
                $v['captions']['pat_size_unit'] = $oArr[$v['pat_size_unit']]?:'';
                $v['captions']['pat_opuser'] = $v['au_name']?:'';
				$v['captions']['pat_spec'] = $this->convertSpecToChinese($v['pat_spec'],$oArr);
            }
        }
		
		$data = [
			'page'=> $page,
			'total'=> $pages['total'],
			'records' => $pages['records'],
			'rows' => $arr
		];
		return $data;
	}

    public function delData($idArr)
    {
        if(!empty($idArr)){
            $exits = $this->db->select('pack_attributes(paa)',['[><]pack_type(pat)'=>['paa.paa_pat_id'=>'pat_id']],'pat_cn_name',['paa_pat_id'=>$idArr,'GROUP'=>'pat_id']);
            if($exits){
                $exitsstr = implode(',',$exits);
                exitJson("包装属性已引用数据：{$exitsstr}，请先处理");
            }
            $exits = $this->db->select('pack_material(pam)',['[><]pack_type(pat)'=>['pam.pam_pat_id'=>'pat_id']],'pat_cn_name',['pam_pat_id'=>$idArr,'GROUP'=>'pat_id']);
            if($exits){
                $exitsstr = implode(',',$exits);
                exitJson("包装物料已引用数据：{$exitsstr}，请先处理");
            }
			$this->db->Begin();

			$this->db->delete('pack_type', ['pat_id'=>$idArr]);
			
			$this->db->End();
		}
		return [];
    }


    public function getDetail($id)
    {
        $arr = [];
        $table = 'pack_type(pat)';
		$join = [
            '[>]object(o)'=>['pat.pat_size_unit'=>'o_id']
        ];
        $fields = ['pat.*','en_name(unit_name)'];

        $arr = $this->db->get($table,$join,$fields,['pat_id'=>$id]);
        if($arr){
            $arr['captions']['pat_attcat'] = $arr['o_name'];
        }

        return $arr;
    }

	/**
 * 将规格编码转换为中文显示
 * @param string $spec 规格编码，如 L@W@H@A1180
 * @param array $objectArr 属性类别数组
 * @return string 转换后的中文显示
 */
private function convertSpecToChinese($spec, $objectArr)
{
    if (empty($spec)) {
        return '';
    }
    
    $parts = explode('@', $spec);
    $result = [];
    
    foreach ($parts as $part) {
        switch ($part) {
            case 'L':
                $result[] = '长';
                break;
            case 'W':
                $result[] = '宽';
                break;
            case 'H':
                $result[] = '高';
                break;
            default:
                // 处理属性类别 A 开头的编码
                if (strpos($part, 'A') === 0) {
                    $attrId = substr($part, 1);
                    if (isset($objectArr[$attrId])) {
                        $result[] = $objectArr[$attrId];
                    } 
                } else {
                    $result[] = $part;
                }
                break;
        }
    }
    
    return implode('', $result);
}
	
}