<?php

namespace app\admin\service\setting;

use app\admin\service\AdminBaseService;
use app\admin\validate\setting\MarketValidate;
use app\model\ContractMarketModel;
use think\exception\ValidateException;

class DMarketService extends AdminBaseService
{
    public function index()
    {
        try {
            $list = ContractMarketModel::where('type', ContractMarketModel::TYPE_DIGITAL_SELF)
                ->order('id', 'desc')
                ->select();
            $rows = [];
            if(!$list->isEmpty()){
                foreach ($list as $item){
                    if(empty($rows[$item['trade_name']])){
                        $rows[$item['trade_name']] = [
                            'trade_name' => $item['trade_name'],
                            'begin_time' => $item['begin_time'],
                            'end_time' => $item['end_time'],
                            'max_price' => $item['max_price'],
                            'step' => $item['step'],
                        ];
                    }
                }
            }

            $rows = array_values($rows);
            return $this->toData('0','SUCCSS',['list' => $rows, 'total' => count($rows)]);
        }catch (\Exception $exception){
            return $this->toData('1', '系统繁忙', []);
        }
    }

    // 详情
    public function detail($param)
    {
        try {
            if(empty($param['trade_name']) || !is_string($param['trade_name'])){
                return $this->toData('1', '参数错误');
            }
            $list = ContractMarketModel::where('type', ContractMarketModel::TYPE_DIGITAL_SELF)
                ->where('trade_name', $param['trade_name'])
                ->order('id', 'desc')->select();
            $rows = [];
            if(!$list->isEmpty()){
                foreach ($list as $item){
                    $rows[] = [
                        'id' => $item['id'],
                        'trade_name' => $item['trade_name'],
                        'begin_time' => $item['begin_time'],
                        'end_time' => $item['end_time'],
                        'max_price' => $item['max_price'],
                        'step' => $item['step'],
                    ];
                }
            }
            return $this->toData('0','SUCCESS',['list' => $rows]);
        }catch (\Exception $exception){
            return $this->toData('1', '系统繁忙', [$exception->getMessage()]);
        }
    }

    // 新增
    public function add($param)
    {
        try {
            // 参数校验
            validate(MarketValidate::class)->scene('add')->check($param);

            // 必须大于当前时间
            if(strtotime($param['end_time']) - time() <= 0){
                return $this->toData('1','结束时间无效1');
            }

            if((strtotime($param['begin_time']) - time()) <= 0 || (strtotime($param['end_time']) - strtotime($param['begin_time'])) <= 0){
                return $this->toData('1','开始时间无效2');
            }


            $market = new ContractMarketModel;
            $market->trade_name = $param['trade_name'];
            $market->begin_time = $param['begin_time'];
            $market->end_time = $param['end_time'];
            $market->max_price = $param['max_price'];
            $market->type = ContractMarketModel::TYPE_DIGITAL_SELF;
            $market->save();

            return $this->toData('0','SUCCESS');
        }catch (ValidateException $validateException){
            return $this->toData('1', $validateException->getMessage(), []);
        }catch (\Exception $exception){
            return $this->toData('1', '系统繁忙', [$exception->getMessage()]);
        }
    }


    // 编辑
    public function edit($param)
    {
        try {
            // 参数校验
            validate(MarketValidate::class)->scene('edit')->check($param);

            // 目标
            $market = ContractMarketModel::where('id', $param['id'])->where('type', ContractMarketModel::TYPE_DIGITAL_SELF)->find();
            if(empty($market)){
                return $this->toData('1','目标不存在');
            }


            // 必须大于当前时间
            if(strtotime($param['end_time']) - time() <= 0){
                return $this->toData('1','时间无效');
            }

            if((strtotime($param['begin_time']) - time()) <= 0 || (strtotime($param['end_time']) - strtotime($param['begin_time'])) <= 0){
                return $this->toData('1','开始时间无效');
            }

            $market->trade_name = $param['trade_name'];
            $market->begin_time = $param['begin_time'];
            $market->end_time = $param['end_time'];
            $market->max_price = $param['max_price'];
            $market->save();

            return $this->toData('0','SUCCESS');
        }catch (ValidateException $validateException){
            return $this->toData('1', $validateException->getMessage(), []);
        }catch (\Exception $exception){
            return $this->toData('1', '系统繁忙', []);
        }
    }

    // 删除
    public function del($param)
    {
        try {
            // 参数校验
            validate(MarketValidate::class)->scene('del')->check($param);

            // 目标
            $market = ContractMarketModel::where('id', $param['id'])->where('type',ContractMarketModel::TYPE_DIGITAL_SELF)->find();
            if(empty($market)){
                return $this->toData('1','目标不存在');
            }

            $market->delete();
            return $this->toData('0','SUCCESS');
        }catch (ValidateException $validateException){
            return $this->toData('1', $validateException->getMessage(), []);
        }catch (\Exception $exception){
            return $this->toData('1', '系统繁忙', []);
        }
    }
}