<?php

namespace app\controller\admin\api\v1;

use app\dao\UserDao;
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('username', 'like', '%' . $key . '%')
                    ->orWhere('invite_code', 'like', '%' . $key . '%')
                    ->orWhere('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.*', 'u.username as parent_username')  // 选择用户表的字段和关联表的 username 字段
            ->get();  // 或者使用 paginate() 来进行分页

        // 格式化结果为数组
        return ApiResponse::success(200, $users->toArray());
    }

    /**
     * @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);
    }
}