<?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\API\PaymentNew;
use App\Utils\ApiResponse;
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', 1);  // 默认第一页
        $size = $request->post('size', 15); // 默认每页15条
        $status = $request->post('status', 0); // 默认状态为0(全部)
        $time = $request->post('time', null); // 默认时间不做过滤

        $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, $todayEnd]);
                    break;
                case 3:
                    $query->whereBetween('createtime2', [$sevenDaysAgoStart, $todayEnd]);
                    break;
            }
        }

        // 添加用户ID过滤条件
        $query->where('user_id', $userId);

        // 查询结果
        $withdrawOrders = $query->orderBy('createtime2', 'desc')
            ->skip(($page - 1) * $size)
            ->take($size)
            ->get();

        // 手动映射字段
        // $withdrawOrders = $withdrawOrders->map(function ($item) {
        //     // 将 money 字段映射为 amount
        //     $item->amount = $item->money;
            
        //     unset($item->money); // 删除原始的 money 字段
        //     return $item;
        // });
        // $withdrawOrders->money = 100;
        // var_dump($withdrawOrders);

        // 返回成功响应
        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');
        //用户存了一个 转账信息 这里是用户转账信息的id
        $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);
        
        //大于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, '等待管理员审核');
        }
        //用户积分减少$money
        UserRewardDao::base($user_id, 1, - ($money_no + 300), '提现');
        $userbank = Userbank::where('id', $bank_id)->first();
        //存入数据库
        $withdraw = Withdraw::create([
                    'user_id' => $user_id,
                    'amount' => $money,
                    'status' => 2,
                    'createtime2' => date('Y-m-d H:i:s'),
                    'username' => $user->username,
                    'status_text' => '已到账',
        ]);
        //获取刚刚存入数据库的id(订单号)
        $orderId = $withdraw->id;
        PaymentNew::pushMoney($money, $userbank->bank_username, $userbank->account, $userbank->bank_name,$orderId);
        // 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');
        //转账订单id
        $id = $request->post('id');
        //管理员审批结果
        $type = $request->post('type');
        //用户id
        $user_id = $request->post('user_id');
        //是否同意转账
        $type = $request->post('type');
        //不同意
        if($type==1){
            $Withdraw = Withdraw::where('id', $id)->first();
            $Withdraw->status = 3;
            $Withdraw->status_text = '已驳回';
            $Withdraw->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 ApiResponse::success(200, null,'操作成功');
        }
        //同意
        $userbank = Userbank::where('user_id',$user_id)->first();
        if ($userbank) {
            PaymentNew::pushMoney($amount,$userbank->bank_username, $userbank->account, $userbank->bank_name,$id);
            $Withdraw = Withdraw::where('id', $id)->first();
            $Withdraw->status = 2;
            $Withdraw->status_text = '已到账';
            $Withdraw->save();
            return ApiResponse::success(200,null,'操作成功');
        }else{
            return ApiResponse::error(200, null, '用户银行信息存在问题');
        }
        // if ($type == 1) {
        //     $res = PaymentNew::pushMoney($amount, $bank_username, $account, $bank_name,$id);
            // var_dump($res);
            // if ($res['Success'] == 200) {
            //     $Withdraw = Withdraw::where('id', $id)->first();
            //     $Withdraw->status = 2;
            //     $Withdraw->status_text = '已到账';
            //     $Withdraw->save();
            //     return ApiResponseApp::success(null, '转账成功');
            // } else {
            //     return ApiResponseApp::error(null, '转账失败');
            // }
        // } else {
        //     $Withdraw = Withdraw::where('id', $id)->first();
        //     $Withdraw->status = 3;
        //     $Withdraw->status_text = '已驳回';
        //     $Withdraw->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, '操作成功');
        // }
    }

     /**
     * @Apidoc\Title("请求回调")
     * @Apidoc\Url("api/withdraw/callback")
     * @Apidoc\Method("GET")
     */
    public function callback(Request $request)
    {
        var_dump($request->all());
    }
}