<?php

namespace App\Http\Controllers\Api\ThirdPart;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
use App\Models\Telegram\TelegramBotUser;
use App\Models\Energy\EnergyAiBishu;
use App\Models\Energy\EnergyThirdPart;

class ThirdPartController extends Controller
{
    public $thirdPlatformId = 1; //使用能量平台ID下单,只能是trongas.io对应的平台
    public $thirdBotId = 1; //使用机器人ID
    public $bishuTrxPrice = 2.5; //笔数trx一笔价格
    public $shanzu32000TrxPrice = 2.5; //闪租3200 trx一笔1小时价格
    public $shanzu65000TrxPrice = 2.9; //闪租65000 trx一笔1小时价格
    
    //查询余额
    public function balance(Request $request)
    {
        $data = TelegramBotUser::where('tg_uid',$request->tg_uid)->where('bot_rid',$this->thirdBotId)->first();
        if($data){
            $returnData = [];
            $returnData['trx_balance'] = $data->cash_trx;
            $returnData['usdt_balance'] = $data->cash_usdt;
            return $this->responseData(200, 'success', $returnData);
        }else{
            return $this->responseData(400, '用户信息不存在,请配置正确的用户ID');
        }
    }
    
    //笔数下单
    public function bishuorder(Request $request)
    {
        if(empty($request->maxDelegateNums) || $request->maxDelegateNums <= 0 || mb_strlen($request->receiveAddress) != 34){
            return $this->responseData(400, '笔数模式下单错误,检查参数');
        }
        
        $data = TelegramBotUser::where('tg_uid',$request->tg_uid)->where('bot_rid',$this->thirdBotId)->first();
        if($data){
            DB::beginTransaction();
            try {
                //判断trx余额是否足够
                if($request->maxDelegateNums * $this->bishuTrxPrice > $data->cash_trx){
                    return $this->responseData(400, '用户trx余额不足,当前:'.$data->cash_trx.',需要:'.($request->maxDelegateNums * $this->bishuTrxPrice));
                }
                
                //扣除用户余额
                TelegramBotUser::where('tg_uid',$request->tg_uid)->where('bot_rid',$this->thirdBotId)->update(['cash_trx' => $data->cash_trx - ($request->maxDelegateNums * $this->bishuTrxPrice)]);
                
                $time = nowDate();
                
                //记录笔数
                $energyAiBishu = EnergyAiBishu::where('wallet_addr',$request->receiveAddress)->first();
                if($energyAiBishu){
                    $save_data = [];
                    $save_data['max_buy_quantity'] = $energyAiBishu->max_buy_quantity + $request->maxDelegateNums;
                    EnergyAiBishu::where('rid',$energyAiBishu->rid)->update($save_data);
                    
                }else{
                    $insert_data = [];
                    $insert_data['bot_rid'] = $this->thirdBotId;
                    $insert_data['wallet_addr'] = $request->receiveAddress;
                    $insert_data['status'] = 0;
                    $insert_data['total_buy_usdt'] = 0;
                    $insert_data['max_buy_quantity'] = $request->maxDelegateNums;
                    $insert_data['create_time'] = $time;
                    EnergyAiBishu::insert($insert_data);
                }
                
                //记录提交明细
                $insert_data = [];
                $insert_data['bot_rid'] = $this->thirdBotId;
                $insert_data['wallet_addr'] = $request->receiveAddress;
                $insert_data['order_type'] = 1;
                $insert_data['tg_uid'] = $request->tg_uid;
                $insert_data['platform_rid'] = $this->thirdPlatformId;
                $insert_data['cishu_energy'] = $request->maxDelegateNums;
                $insert_data['before_trx'] = $data->cash_trx;
                $insert_data['change_trx'] = $request->maxDelegateNums * $this->bishuTrxPrice;
                $insert_data['after_trx'] = $data->cash_trx - ($request->maxDelegateNums * $this->bishuTrxPrice);
                $insert_data['order_time'] = $time;
                $insert_data['process_status'] = 9; //无需额外处理下单
                EnergyThirdPart::insert($insert_data);
                
                $returnData['orderId'] = createNo();
                $returnData['orderMoney'] = $request->maxDelegateNums * $this->bishuTrxPrice;
                
                DB::commit();
                return $this->responseData(200, 'success', $returnData);
            } catch (\Exception $e) {
                DB::rollBack();
                return $this->responseData(400, '下单失败'.$e->getMessage());
            }
            
        }else{
            return $this->responseData(400, '用户信息不存在,请配置正确的用户ID');
        }
    }
    
    //闪租下单
    public function shanzuorder(Request $request)
    {
        if(empty($request->payNums) || $request->payNums < 32000 || mb_strlen($request->receiveAddress) != 34 || $request->rentTime != 1){
            return $this->responseData(400, '闪租模式下单错误,检查参数');
        }
        
        $data = TelegramBotUser::where('tg_uid',$request->tg_uid)->where('bot_rid',$this->thirdBotId)->first();
        if($data){
            DB::beginTransaction();
            try {
                if($request->payNums == 65000){
                    $kouTrx = $this->shanzu65000TrxPrice;
                }else{
                    $kouTrx = ceil($request->payNums / 32000) * $this->shanzu32000TrxPrice;
                }
                
                //判断trx余额是否足够
                if($kouTrx > $data->cash_trx){
                    return $this->responseData(400, '用户trx余额不足,当前:'.$data->cash_trx.',需要:'.$kouTrx);
                }
                
                //扣除用户余额
                TelegramBotUser::where('tg_uid',$request->tg_uid)->where('bot_rid',$this->thirdBotId)->update(['cash_trx' => $data->cash_trx - $kouTrx]);
                
                $time = nowDate();
                
                //记录提交明细,从这个里面下单
                $insert_data = [];
                $insert_data['bot_rid'] = $this->thirdBotId;
                $insert_data['wallet_addr'] = $request->receiveAddress;
                $insert_data['order_type'] = 2;
                $insert_data['tg_uid'] = $request->tg_uid;
                $insert_data['platform_rid'] = $this->thirdPlatformId;
                $insert_data['cishu_energy'] = $request->payNums;
                $insert_data['before_trx'] = $data->cash_trx;
                $insert_data['change_trx'] = $kouTrx;
                $insert_data['after_trx'] = $data->cash_trx - $kouTrx;
                $insert_data['order_time'] = $time;
                $insert_data['process_status'] = 1; //需要处理下单
                EnergyThirdPart::insert($insert_data);
                
                $returnData['orderId'] = createNo();
                $returnData['orderMoney'] = $kouTrx;
                
                DB::commit();
                return $this->responseData(200, 'success', $returnData);
            } catch (\Exception $e) {
                DB::rollBack();
                return $this->responseData(400, '下单失败'.$e->getMessage());
            }
            
        }else{
            return $this->responseData(400, '用户信息不存在,请配置正确的用户ID');
        }
    }
}