<?php

/**
 * +----------------------------------------------------------------------
 * | Created By PhpStorm
 * +----------------------------------------------------------------------
 * | DATE: 2021/8/4
 * +----------------------------------------------------------------------
 * | TIME: 14:46
 * +----------------------------------------------------------------------
 * | Author: YangXing(925032253@qq.com)
 * +----------------------------------------------------------------------
 * | Class: paramset
 * +----------------------------------------------------------------------
 */

namespace model\pro;


class paramset extends \model
{

    public $key = 'ptpa_id';

    private static $dataType = [
        'int' => '数字',
        'double' => '带小数位数字',
        'string' => '文本',
        'smalltxt' => '小备注',
        'bigtxt' => '大备注',
        'list' => '列表',
        'radio' => '单选',
        'checkbox' => '多选'
    ];

    /**
     * 有附表的
     * @var array
     */
    public static $isParamType = [
        'list' => '列表',
        'radio' => '单选',
        'checkbox' => '多选'
    ];


    /**
     * 表名
     * @var string
     */
    public $table = 'part_param';

    /**
     * @return array|void
     */
    public function getListByPcId($id)
    {
        $where = [
            'ptpa_pc_id' => $id,
            'ORDER' => ['ptpa_col_order']
        ];
        $list = $this->db->select($this->table,'*',$where);
        if(!empty($list) && is_array($list)){
            foreach ($list as &$value) {
                //是否可以查看附表
                $value['is_accessory'] = isset(self::$isParamType[$value['ptpa_type']]) ?: false;
                //更改名称
                $value['ptpa_type'] = self::$dataType[$value['ptpa_type']];
                foreach ($value as $k => $v)
                {
                    if($v === 0 || $v === '0.00' || empty($v) || is_null($v)){
                        $value[$k] = '';
                    }
                }
            }
        }
        return $list;
    }

    public function getNode($id)
    {
		$data = $this->db->get($this->table,'*',['ptpa_id' => $id]);
		$data['param_strenval'] = [];
		$rows = $this->db->select('pro_param_strenval', ['ppsl_cn_name','ppsl_en_name'],['ppsl_ptpa_id' => $id]);
		if(!empty($rows))
		{
			foreach($rows as $v)
			{
				$data['param_strenval'][] = $v['ppsl_cn_name'].':'.$v['ppsl_en_name'];
			}
		}
		$data['param_strenval'] = implode("\n", $data['param_strenval']);
        return $data; 
    }

    /**
     * @param array|int|string $keys
     * @return bool|\PDOStatement
     */
    public function deleteRows($keys)
    {
        if(!is_array($keys)) $keys = explode(',',$keys);
        $this->db->delete('part_param_sche',['pps_ptpa_id' => $keys]);
        return $this->db->delete($this->table,['ptpa_id' => $keys]);
    }

    /**
     * 添加
     * @param $data
     * @return false|\PDOStatement
     */
    public function add($data)
    {
		$this->db->Begin();
		if(isset($data['param_strenval']))
		{
			$strenval = $data['param_strenval'];
			unset($data['param_strenval']);
		}
		$res = $this->db->insert($this->table,$data);
		$id = $this->db->id();
		if(isset($strenval))
			$this->setStrenval($id, $strenval);
		$this->db->End();
        return $res;
    }

    /**
     * 更新
     * @param \stirng $id
     * @param mixed $data
     * @return false|\PDOStatement|void
     */
    public function set($id,$data)
    {
		if(isset($data['param_strenval']))
		{
			$strenval = $data['param_strenval'];
			$this->setStrenval($id, $strenval);
			unset($data['param_strenval']);
		}
        return $this->db->update($this->table,$data,['ptpa_id' => $id]);
    }


	public function setStrenval($id, $vals)
	{
		$tArr = explode("\n", strtr($vals, [";"=>"\n","；"=>"\n","\r\n"=>"\n", "："=>':']));
		$this->db->Begin();
		$hasArr = $this->db->select("pro_param_strenval", 'ppsl_cn_name', ["ppsl_ptpa_id"=>$id]);
		$newArr = [];
		foreach($tArr as $row)
		{
			$x = explode(":", $row);
			$x[0] = trim($x[0]);
			$x[1] = trim($x[1]);
			if(!empty($x[0]) && !empty($x[1]))
			{
				$newArr[$x[0]] = $x[1];
			}
		}
		foreach($newArr as $cn=>$en)
		{
			if(!in_array($cn, $hasArr))
			{
				$this->db->insert('pro_param_strenval', ['ppsl_ptpa_id'=>$id, 'ppsl_cn_name'=>$cn, 'ppsl_en_name'=>$en]);
			}
			else
			{
				$this->db->update('pro_param_strenval', ['ppsl_en_name'=>$en], ['ppsl_ptpa_id'=>$id, 'ppsl_cn_name'=>$cn]);
			}
		}
		$delArr = array_diff($hasArr, array_keys($newArr));
		if(!empty($delArr))
			$this->db->delete('pro_param_strenval', ['ppsl_ptpa_id'=>$id, 'ppsl_cn_name'=>$delArr]);
		$this->db->End();
		return true;
	}

    /**
     * @param $key
     * @param string $where
     * @param int $page
     * @param int $pagesize
     * @param string $sidx
     * @param string $sord
     * @param string $orderby
     * @return array
     */
    public function scheduleList($key, $where='',$page=0,$pagesize=0,$sidx='',$sord='asc',$orderby='')
    {
        $fields = '*';
        $where = $this->filter2medoo($where);
        $where = $this->listWhere($where,$page,$pagesize,$sidx,$sord,$orderby);
        $where['pps_ptpa_id'] = $key;
        if($page>0 && $pagesize>0){
            $pages = $this->paging('part_param_sche',$where,$page,$pagesize);
            $where["LIMIT"] = [$pages['limit'],$pagesize];
        }
        $rows = $this->db->select('part_param_sche',$fields,$where);

        $data = [
            'page'=> $page,
            'total'=> $pages['total'],
            'records' => $pages['records'],
            'rows' => $rows
        ];
        return $data;
    }

    /**
     * @param $key
     * @return false|\PDOStatement
     */
    public function scheduleAddRow($key)
    {
        $data = [
            'pps_ptpa_id' => $key,
            //'opuser' => $this->getOpuser(),
            //'create_time' => $this->getDateTime(),
            //'update_time' => $this->getOpuser(),
        ];
        return $this->db->insert('part_param_sche',$data);
    }

    /**
     * @param $keys
     * @return false|\PDOStatement
     */
    public function scheduleDeleteRows($keys)
    {
        if(!is_array($keys)) $keys = explode(',',$keys);
        return $this->db->delete('part_param_sche',['pps_id'=>$keys]);
    }

    /**
     * @param $key
     * @param $field
     * @param $value
     * @return array|false|\PDOStatement
     */
    public function setValues($key,$field,$value)
    {
        return $this->db->update('part_param_sche',[$field => $value],[ 'pps_id' => $key]);
    }
}