<?php

namespace app\controller\api;

use app\model\Withdraw;
use app\model\User;
use app\model\ExchangeRate;
use app\model\Userbank;

use support\Request;
use App\Utils\API\Payment;

use App\Utils\ApiResponseApp;

use App\dao\UserRewardDao;
use hg\apidoc\annotation as Apidoc;
use Carbon\Carbon;

/**
 * @Apidoc\Title("提现订单")
 */

class WithdrawController
{
    
    /**
     * @Apidoc\Title("1.0 查询当前用户提现订单")
     * @Apidoc\Url("api/withdraw/withdrawCashList")
     * @Apidoc\Method("POST")
     */
    public function withdrawCashList(Request $request)
    {
        $page = $request->post('page');
        $size = $request->post('size');
        $status = $request->post('status');
        $time = $request->post('time');
        
        $userId = $request->data['id'];
          // 初始化查询构建器
    $query = Withdraw::query();

    // 根据状态过滤
    if ($status != 0) {
        $query->where('status', $status);
    }

    // 根据时间过滤
    if (!is_null($time)) {
        $todayStart = Carbon::now()->startOfDay(); // 今天的开始时间 (00:00:00)
        $todayEnd = Carbon::now()->endOfDay();     // 今天的结束时间 (23:59:59)
        $yesterdayStart = Carbon::now()->subDay()->startOfDay(); // 昨天的开始时间
        $sevenDaysAgoStart = Carbon::now()->subDays(7)->startOfDay(); // 七天前的开始时间

        switch ($time) {
            case 1:
                $query->whereBetween('createtime2', [$todayStart, $todayEnd]);
                break;
            case 2:
                $query->whereBetween('createtime2', [$yesterdayStart, $todayStart]);
                break;
            case 3:
                $query->whereBetween('createtime2', [$sevenDaysAgoStart, $todayEnd]);
                break;
        }
    }

    // 添加用户ID过滤条件
    $query->where('user_id', $userId);
    $withdrawOrders = $query->orderBy('createtime2', 'desc')->get();
    return ApiResponseApp::success($withdrawOrders);
    }


    /**
     * @Apidoc\Title("小于1000直接转账，大于1000生成审批")
     * @Apidoc\Url("api/withdraw/submit")
     * @Apidoc\Method("POST")
     */
    public function submit(Request $request)
    {
        $money_no = $request->post('money');
        //不知道啥用
        $bank_id = $request->post('bank_id');
        $user_id=$request->data['id'];
        $user=User::find($user_id);
        //提现金额
        $rate = ExchangeRate::where('type','BDT')->get();
        $money = $money_no/100*$rate[0]['points'];
        var_dump($money);
        //用户积分减少$money
        UserRewardDao::base($user_id, 1, -($money_no+300), '提现');
        //大于1000等待管理员审核
        if($money>=1000){
            Withdraw::create([
                'user_id' => $user_id,
                'amount' => $money,
                'status' => 1,
                'createtime2' => date('Y-m-d H:i:s'),
                'username' => $user->username,
                'status_text' => '申请中',
            ]);
            return ApiResponseApp::success(null,'等待管理员审核');
        }
        $userbank = Userbank::where('user_id',$user_id)->first();
        $res = Payment::pushMoney($money,$userbank->bank_username,$userbank->account,$userbank->bank_name);
        var_dump($res);
        if ($res['Success'] == 200) {
            Withdraw::create([
                'user_id' => $user_id,
                'amount' => $money,
                'status' => 2,
                'createtime2' => date('Y-m-d H:i:s'),
                'username' => $user->username,
                'status_text' => '已到账',
            ]);
            return ApiResponseApp::success(null,'转账成功');
        }else{
            return ApiResponseApp::error(null,'转账失败');
        }
        return ApiResponseApp::success(null,'转账成功');
    }

 /**
     * @Apidoc\Title("管理员同意转账")
     * @Apidoc\Url("api/withdraw/pushMoney")
     * @Apidoc\Method("POST")
     */
    public function pushMoney(Request $request)
    {
        //金额
        $amount = $request->post('amount');
        //收款户名
        $bank_username = $request->post('bank_username');
        //收款帐号
        $account = $request->post('account');
        //收款银行名称
        $bank_name = $request->post('bank_name');
        //转账订单id
        $id = $request->post('id');
        //管理员审批结果
        $type = $request->post('type');

        if($type == 1){
            $res = Payment::pushMoney($amount,$bank_username,$account,$bank_name);
            var_dump($res);
            if ($res['Success'] == 200) {
                $userbank = Userbank::where('id',$id)->first();
                $userbank->status = 2;
                $userbank->status_text = '已到账';
                $userbank->save();
                return ApiResponseApp::success(null,'转账成功');
            }else{
                return ApiResponseApp::error(null,'转账失败');
            }
        }else{
            $userbank = Userbank::where('id',$id)->first();
            $userbank->status = 3;
            $userbank->status_text = '已驳回';
            $userbank->save();
            $rate = ExchangeRate::where('type','BDT')->get();
            //计算积分
            $money = $amount*100/$rate[0]['points']+300;
            //用户id
            $user_id=$request->data['id'];
             //用户积分增加$money
            UserRewardDao::base($user_id, 1, $money, '提现失败返还');
            return ApiResponseApp::error(null,'操作成功');
        }
        
    }
}
