<?php


/**
 * 代理商铺Model
 * Class B2cSq
 */
class B2cSq extends B2cBase
{

    /**
     * 添加或者更新代理店铺
     * @param array $data sh_dshop 表的数组
     * @param array $link sh_dshop_link 表的数组
     * @return array [status => true|false ,data => '错误信息|成功']
     */
    public function update(array $data,array $link) : array
    {
        if(empty($data)){
            return LibFc::ReturnData(false,'参数错误');
        }
        if(!empty($link)){
            //取开始时间的最小值
            $min = min(array_column($link,'dsl_btime'));
            //取结束时间的最大值
            $max = max(array_column($link,'dsl_etime'));
            //var_dump($max);
            if($data['dshop_btime'] > $min) $data['dshop_btime'] = $min;
            if($data['dshop_etime'] < $max)  $data['dshop_etime'] = $max;
        }
        $this->B2CDb->Begin();
        $res = $this->B2CDb->Query($this->sql($data,'sh_dshop'));
        unset($data);
        if(!$res){
            $this->B2CDb->Rollback();
            return LibFc::ReturnData(false,'保存失败，请稍后再试');
        }
        if(!empty($link)){
            $res = $this->B2CDb->Query($this->sql($link,'sh_dshop_link'));
            if(!$res){
                $this->B2CDb->Rollback();
                return LibFc::ReturnData(false,'保存失败，请稍后再试');
            }
        }
        unset($link);
        $this->B2CDb->End();
        return LibFc::ReturnData(true,'保存成功');
    }

    /**
     * 删除代理商铺
     * @param int $id 商铺ID
     * @return array [status => true|false ,data => '错误信息|成功']
     */
    public function delete(int $id) : array
    {
        $this->B2CDb->Begin();
        $res = $this->del("sh_dshop",sprintf(" and dshop_id=%d",$id));
        if(!$res['status']){
            $this->B2CDb->Rollback();
            return LibFc::ReturnData(false,'删除失败，请稍后再试');
        }
        $res = $this->del('sh_dshop_link',sprintf(" and dsl_dshop_id=%d",$id));
        if(!$res['status']){
            $this->B2CDb->Rollback();
            return LibFc::ReturnData(false,'删除失败，请稍后再试');
        }
        $this->B2CDb->End();
        return $res;
    }

    /**
     * 生成replace sql语句
     * @param $dataArr array 需要修改或者添加的数组
     * @param $table string 表名
     * @return string sql 语句
     */
    private function sql(array $dataArr,string $table) : string
    {
        $filedArr = $valArr = [];
        if(isset($dataArr['0'])){ //二维
            foreach($dataArr as $k => $v)
            {
                if($k == 0){
                    $filedArr = array_map(function ($key){
                        return LibFc::Escape($key);
                    },array_keys($v));
                }
                array_push($valArr,'('.implode(',',array_map(function($value){
                    return sprintf("'%s'", LibFc::Escape($value, true));
                },$v)).')');
            }
            $sql = sprintf("replace into %s (%s) values %s", LibFc::Escape($table), implode(',', $filedArr), implode(',', $valArr));
        }else{
            foreach($dataArr as $k => $v)
            {
                $filedArr[] = LibFc::Escape($k);
                $valArr[] = sprintf("'%s'", LibFc::Escape($v, true));
            }
            $sql = sprintf("replace into %s (%s) values (%s)", LibFc::Escape($table), implode(',', $filedArr), implode(',', $valArr));
        }
        return $sql;
    }
}