<?php

namespace app\admin\service\setting;

use app\admin\service\AdminBaseService;
use app\model\DigitalListModel;

// 现货交易对
class DigitalService extends AdminBaseService
{

    public function index()
    {
        try {
            $list = DigitalListModel::order('id', 'desc')->select();
            $rows = [];
            if(!$list->isEmpty()){
                $rows = $list->toArray();
            }
            return $this->toData('0', 'SUCCESS', ['list' => $rows, 'total' => count($rows)]);
        }catch (\Exception $exception){
            return $this->toData('1', '系统繁忙', []);
        }
    }

    public function add($param)
    {
        try {
            if(empty($param['trade_name']) || !is_string($param['trade_name'])){
                return $this->toData('1', '数字货币名称无效');
            }


            if(empty($param['exchange_name']) || !is_string($param['exchange_name'])){
                return $this->toData('1', '数字币兑换对名称无效');
            }

            // 简介
            if(!empty($param['info']) && !is_string($param['info'])){
                return $this->toData('1', '简介无效');
            }
            $info = $param['info']?? '';

            // 状态
            if(!isset($param['status']) || !in_array($param['status'], [0,1])){
                return $this->toData('1', '启用状态无效');
            }

            // 排序
            if(!isset($param['sort']) || !is_numeric($param['sort']) || ceil($param['sort']) != $param['sort']){
                return $this->toData('1', '排序无效');
            }

            // 图片链接
            if(empty($param['logo_link']) || !is_string($param['logo_link'])){
                return $this->toData('1', 'logo链接无效');
            }

            // 小数位数
            if(!isset($param['keep_decimal']) || !is_numeric($param['keep_decimal']) || $param['keep_decimal'] < 0 || ceil($param['keep_decimal']) != $param['keep_decimal']){
                return $this->toData('1', '保留小数位无效');
            }

            // 判断股票代码是否已经存在
            $count = DigitalListModel::where('trade_name', $param['trade_name'])->where('exchange_name', $param['exchange_name'])->count();
            if($count > 0){
                return $this->toData('1', '现货数字币交易对已经存在');
            }

            $digitalList = new DigitalListModel;
            $digitalList->trade_name = $param['trade_name'];
            $digitalList->exchange_name = $param['exchange_name'];
            $digitalList->status = $param['status'];
            $digitalList->logo_link = $param['logo_link'];
            $digitalList->sort = $param['sort'];
            $digitalList->keep_decimal = $param['keep_decimal'];

            $digitalList->info = $info;
            $digitalList->create_time = date('Y-m-d H:i:s');
            $digitalList->update_time = date('Y-m-d H:i:s');
            $digitalList->save();

            // 设置缓存
            $fee_key="DIGITAL:LIST:".strtoupper($param['trade_name']);
            $redis = $this->getRedis();
            $redis->del($fee_key);
            $redis->hMSet($fee_key,[
                'name'=>strtoupper($param['trade_name']),
                'sort'=>$param['sort'],
                'exchange_name'=>$param['exchange_name'],
                'logo_link'=>$param['logo_link'],
                'keep_decimal'=>$param['keep_decimal'],
                'status'=>$param['status'],
            ]);

            return $this->toData('0', '操作成功', []);
        }catch (\Exception $exception){
            return $this->toData('1', '系统繁忙', []);
        }
    }

    public function edit($param)
    {

        try {
            if(empty($param['id']) || !is_numeric($param['id'])){
                return $this->toData('1', '目标不存在', []);
            }

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

            if(empty($param['trade_name']) || !is_string($param['trade_name'])){
                return $this->toData('1', '数字货币名称无效');
            }


            if(empty($param['exchange_name']) || !is_string($param['exchange_name'])){
                return $this->toData('1', '数字币兑换对名称无效');
            }

            // 简介
            if(!empty($param['info']) && !is_string($param['info'])){
                return $this->toData('1', '简介无效');
            }
            $info = $param['info']?? '';

            // 状态
            if(!isset($param['status']) || !in_array($param['status'], [0,1])){
                return $this->toData('1', '启用状态无效');
            }

            // 排序
            if(!isset($param['sort']) || !is_numeric($param['sort']) || ceil($param['sort']) != $param['sort']){
                return $this->toData('1', '排序无效');
            }

            // 图片链接
            if(empty($param['logo_link']) || !is_string($param['logo_link'])){
                return $this->toData('1', 'logo链接无效');
            }

            // 小数位数
            if(!isset($param['keep_decimal']) || !is_numeric($param['keep_decimal']) || $param['keep_decimal'] < 0 || ceil($param['keep_decimal']) != $param['keep_decimal']){
                return $this->toData('1', '保留小数位无效');
            }

            // 判断股票代码是否已经存在
            $count = DigitalListModel::where('trade_name', $param['trade_name'])->where('exchange_name', $param['exchange_name'])
                ->where('id','<>', $param['id'])
                ->count();
            if($count > 0){
                return $this->toData('1', '现货数字币交易对已经存在');
            }

            $digitalList->trade_name = $param['trade_name'];
            $digitalList->exchange_name = $param['exchange_name'];
            $digitalList->status = $param['status'];
            $digitalList->logo_link = $param['logo_link'];
            $digitalList->sort = $param['sort'];
            $digitalList->keep_decimal = $param['keep_decimal'];

            $digitalList->info = $info;
            $digitalList->update_time = date('Y-m-d H:i:s');
            $digitalList->save();

            // 设置缓存
            $fee_key="DIGITAL:LIST:".strtoupper($param['trade_name']);
            $redis = $this->getRedis();
            $redis->del($fee_key);
            $redis->hMSet($fee_key,[
                'name'=>strtoupper($param['trade_name']),
                'sort'=>$param['sort'],
                'logo_link'=>$param['logo_link'],
                'keep_decimal'=>$param['keep_decimal'],
                'status'=>$param['status'],
            ]);

            return $this->toData('0', '操作成功', []);
        }catch (\Exception $exception){
            return $this->toData('1', '系统繁忙', []);
        }
    }

    public function getTradeNameList($param)
    {
        try {
            if(isset($param['is_owner']) && in_array($param['is_owner'], [0,1])){
                $list = DigitalListModel::where('status', 1)->order('id', 'desc')
                    ->where('is_owner', $param['is_owner'])
                    ->column('trade_name', 'id');
            } else {
                $list = DigitalListModel::where('status', 1)->order('id', 'desc')->column('trade_name', 'id');
            }

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