<?php

namespace app\controller\admin\api\v1;

use app\dao\UserDao;
use app\dao\UserRewardDao;
use support\Request;
use App\Utils\ApiResponse;
use App\model\Admin;
use app\model\User;
use app\model\UserPhone;
use app\model\UserPhoneLog;
use hg\apidoc\annotation as Apidoc;
use app\model\Withdraw;

/**
 * @Apidoc\Title("用户控制器")
 * @Apidoc\Group("admin")
 */
class JobuserController
{
    /**
     * @Apidoc\Title("1.0 获取用户列表")
     * @Apidoc\Url("admin/api/v1/Jobuser/lists")
     * @Apidoc\Method("POST")
     * @Apidoc\Param("username", type="string",require=true, desc="用户名")
     * @Apidoc\Param("password", type="string",require=true, desc="密码")
     */
    public function lists(Request $request)
    {
        // 获取请求的参数
        $data = $request->post();

        // 构建查询构造器
        $query = User::query();

        // 根据 key 进行模糊查询
        if (!empty($data['key'])) {
            $key = $data['key'];
            $query->where(function ($query) use ($key) {
                $query->where('users.username', 'like', '%' . $key . '%')
                    ->orWhere('users.invite_code', 'like', '%' . $key . '%')
                    ->orWhere('users.remark', 'like', '%' . $key . '%');
            });
        }

        // 根据 status 过滤,假设 status 字段存在并且不是 -1
        if (isset($data['status']) && $data['status'] != -1) {
            $status = (int)$data['status']; // 强制转换为整数
            // 使用 users 表的别名明确指定 status 字段
            $query->where('users.status', $status);
        }

        // 使用 join 进行关联查询 f_id 对应的用户名称
        $users = $query->leftJoin('users as u', 'users.f_id', '=', 'u.id') // 假设 users 表有 id 字段,f_id 关联到父用户
            ->select(
                'users.id',
                'users.username',
                'users.updated_at',
                'users.invite_code',
                'users.login_time',
                'users.money',
                'users.remark',
                'users.status',
                'users.vip_id',
                'users.created_at',
                'u.username as parent_username' // 选择所需字段,并为父用户用户名起别名
            )->where('users.isrobot',0)
            ->orderBy('users.id', 'desc')->get();  // 确保按 users 表的 id 排序


        // 返回分页结果
        return ApiResponse::success(200, $users);
    }

    /**
     * @Apidoc\Title("1.0 封禁用户")
     * @Apidoc\Url("admin/api/v1/Jobuser/black")
     * @Apidoc\Method("POST")
     * @Apidoc\Param("id", type="int",require=true, desc="用户id")
     */
    public function black(Request $request)
    {
        // 获取请求数据
        $data = $request->post();
        $user = User::find($data['id']);
        $user->status = 0;
        $user->save();
        return ApiResponse::success(200, []);
    }
    /**
     * @Apidoc\Title("1.0 解禁用户")
     * @Apidoc\Url("admin/api/v1/Jobuser/outblack")
     * @Apidoc\Method("POST")
     * @Apidoc\Param("id", type="int",require=true, desc="用户id")
     */
    public function outblack(Request $request)
    {
        // 获取请求数据
        $data = $request->post();
        $user = User::find($data['id']);
        $user->status = 1;
        $user->save();
        return ApiResponse::success(200, []);
    }
    /**
     * @Apidoc\Title("1.0 查询用户树")
     * @Apidoc\Url("admin/api/v1/Jobuser/getSonId")
     * @Apidoc\Method("POST")
     * @Apidoc\Param("id", type="int",require=true, desc="用户id")
     */
    public function getSonId(Request $request)
    {
        // 获取请求数据
        $data = $request->post();
        $user = User::find($data['id']);
        $user->status = 1;
        $user->save();
        return ApiResponse::success(200, []);
    }
    /**
     * @Apidoc\Title("1.0 查询用户树")
     * @Apidoc\Url("admin/api/v1/Jobuser/getSonId")
     * @Apidoc\Method("POST")
     * @Apidoc\Param("id", type="int",require=true, desc="用户id")
     */
    public function del(Request $request)
    {
        // 获取请求数据
        $data = $request->post();
        UserDao::del($data['id']);
        return ApiResponse::success(200, []);
    }
    /**
     * @Apidoc\Title("1.0 查询用户提现记录")
     * @Apidoc\Url("admin/api/v1/Jobuser/getWithdraw")
     * @Apidoc\Method("POST")
     * @Apidoc\Param("id", type="int",require=true, desc="用户id")
     */
    public function getWithdraw(Request $request)
    {
        // 获取请求数据
        $data = $request->post();
        $Withdraw = Withdraw::where('user_id', $data['id'])->orderByDesc('id')->get();
        return ApiResponse::success(200, $Withdraw);
    }
    /**
     * @Apidoc\Title("1.0 修改用户备注")
     * @Apidoc\Url("admin/api/v1/Jobuser/set_user_remark")
     * @Apidoc\Method("POST")
     * @Apidoc\Param("id", type="int",require=true, desc="用户id")
     * @Apidoc\Param("remark", type="string",require=true, desc="用户备注")
     */
    public function set_user_remark(Request $request)
    {
        // 获取请求数据
        $data = $request->post();
        $user = User::find($data['id']);
        $user->remark = $data['remark'];
        $user->save();
        return ApiResponse::success(200, []);
    }
    /**
     * @Apidoc\Title("1.0 修改用户密码")
     * @Apidoc\Url("admin/api/v1/Jobuser/set_user_password")
     * @Apidoc\Method("POST")
     * @Apidoc\Param("id", type="int",require=true, desc="用户id")
     * @Apidoc\Param("password", type="string",require=true, desc="密码")
     */
    public function set_user_password(Request $request)
    {
        // 获取请求数据
        $data = $request->post();
        $user = User::find($data['id']);
        $user->password = password_hash($data['password'], PASSWORD_DEFAULT);
        $user->save();
        return ApiResponse::success(200, []);
    }
    /**
     * @Apidoc\Title("1.0 查看用户提现记录")
     * @Apidoc\Url("admin/api/v1/Jobuser/set_user_password")
     * @Apidoc\Method("POST")
     * @Apidoc\Param("id", type="int",require=true, desc="用户id")
     */
    public function get_user_withdraw(Request $request)
    {
        // 获取请求数据
        $data = $request->post();
        $Withdraw = Withdraw::where('user_id', $data['id'])->orderByDesc('id')->get();
        return ApiResponse::success(200, $Withdraw);
    }
    /**
     * @Apidoc\Title("1.0 查询用户手机号和在线时间")
     * @Apidoc\Url("admin/api/v1/Jobuser/set_user_password")
     * @Apidoc\Method("POST")
     * @Apidoc\Param("id", type="username",require=true, desc="用户名称")
     */
    public function get_user_wphone(Request $request)
    {
        // 获取请求数据
        $data = $request->post();

        $user = User::where('username', $data['username'])->first();
        // 查询用户的手机号
        $UserPhone = UserPhone::where('user_id', $user->id)->get();

        // 创建一个数组来存储手机号和对应的在线时间
        $userPhonesWithTime = [];

        // 遍历每个手机号,查询该手机号的在线时间总和
        foreach ($UserPhone as $v) {
            $time = UserPhoneLog::where('phone', $v->phone)->sum('time');
            // 将手机号和总时间添加到结果数组中
            $userPhonesWithTime[] = [
                'phone' => $v->phone,
                'total_time' => floor($time / 60)
            ];
        }
        $res['user'] = $user;
        $res['userPhonesWithTime'] = $userPhonesWithTime;
        // 返回计算结果
        return ApiResponse::success(200, $res);
    }
    /**
     * @Apidoc\Title("1.0 增减用户积分")
     * 减法传递 负数 正数增加
     * @Apidoc\Url("admin/api/v1/Jobuser/add_money")
     * @Apidoc\Method("POST")
     * @Apidoc\Param("id", type="int",require=true, desc="用户id")
     * @Apidoc\Param("money", type="int",require=true, desc="金额")
     * @Apidoc\Param("memo", type="string",require=true, desc="备注")
     */
    public function add_money(Request $request)
    {
        // 获取请求数据
        $data = $request->post();
        ///用户id
        $user_id = $data['id'];
        //金额
        $money = $data['money'];
        //备注
        $memo = $data['memo'];
        UserRewardDao::adjust($user_id, $money, $memo);
        // 返回计算结果
        return ApiResponse::success(200, []);
    }
}