<?php
/**
 * @Created by PhpStorm
 * @author: Kirin
 * @day: 2024/12/16
 * @time: 10:43
 */

namespace app\controller\api\user;


use app\common\ApiBaseController;
use app\Request;
use app\services\user\UserLevelServices;
use app\services\user\UserServices;
use app\validate\api\LoginValidate;
use think\exception\ValidateException;

/**
 * 用户基本类
 * Class User
 * @package app\controller\api\user
 */
class User extends ApiBaseController
{

    public function __construct(Request $request, UserServices $services)
    {
        parent::__construct($request);
        $this->service = $services;
    }

    public function info()
    {
        //用户信息
        $user = $this->request->user();
        if (is_object($user)) $user = $user->toArray();
        /** @var UserLevelServices $levelService */
        $levelService = app()->make(UserLevelServices::class);
        //用户等级
        $level = $levelService->getUserLevelInfo($user['uid']);
        $user['level_info'] = $level;
        return $this->success('ok', $user);
    }

    public function setAccount()
    {
        $user = $this->request->user();
        if ($user['change_account_time'] > strtotime(date('Y-01-01', time()) && $user['change_account_time'] < strtotime(date('Y-12-31', time())))) {
            $this->error('今年已经修改过账号,不能再修改了');
        }
        $new = $this->request->post('new_account');
        if ($this->service->be(['account' => $new])) $this->error('账号已存在');
        try {
            validate(LoginValidate::class)->check([
                'account' => $new,
            ]);
        } catch (ValidateException $e) {
            return $this->error($e->getError());
        }
        $res = $this->service->update($user['uid'], ['account' => $new, 'change_account_time' => time()]);
        if ($res) {
            return $this->success('修改成功');
        } else {
            return $this->error('修改失败');
        }
    }

    /**
     * 手机号换绑
     */
    public function changeMobile()
    {
        $user = $this->request->user();
        [$new_phone, $old_captcha, $new_captcha] = $this->request->postMore([['new_phone', ''], ['old_captcha', ''], ['new_captcha', '']], true);
        //验证手机号

        check_sms_captcha($user['phone'], 'change', $old_captcha);
        check_sms_captcha($new_phone, 'change_new', $new_captcha);

        $res = $this->service->update($user['uid'], ['phone' => $new_phone]);
        if ($res) {
            return $this->success('修改成功');
        } else {
            return $this->error('修改失败');
        }
    }

    public function edit()
    {
        $user = $this->request->user();
        $data = $this->request->postMore([
            ['nickname', ''],
            ['avatar', '']
        ]);
        $data = array_filter($data);
        if (!$data) {
            return $this->error('没有修改任何信息');
        }
        $res = $this->service->update($user['uid'], $data);
        if ($res) {
            return $this->success('修改成功');
        } else {
            return $this->error('修改失败');
        }
    }


}