<?php

namespace app\data\controller\api;

use app\data\model\DataUser;
use app\data\service\MessageService;
use app\data\service\UserAdminService;
use think\admin\Controller;

/**
 * 用户登录注册接口
 * Class Login
 * @package app\data\controller\api
 */
class Login extends Controller
{
    /**
     * 接口认证类型
     * @var string
     */
    private $type;

    /**
     * 控制器初始化
     */
    protected function initialize()
    {
        // 接收接口类型
        $this->type = $this->request->request('api');
        $this->type = $this->type ?: $this->request->header('api-name');
        $this->type = $this->type ?: $this->request->header('api-type');
        $this->type = $this->type ?: UserAdminService::API_TYPE_WAP;
        if (empty(UserAdminService::TYPES[$this->type])) {
            $this->error("接口支付[{$this->type}]未定义规则！");
        }
    }

    /**
     * 用户登录接口
     * @throws \think\admin\Exception
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\DbException
     * @throws \think\db\exception\ModelNotFoundException
     */
    public function in()
    {
        $data = $this->_vali([
            'phone.mobile'     => '手机号码格式错误！',
            'phone.require'    => '手机号码不能为空！',
            'password.require' => '登录密码不能为空！',
        ]);
        $map = ['deleted' => 0, 'phone' => $data['phone']];
        $user = DataUser::mk()->where($map)->findOrEmpty();
        if ($user->isEmpty()) $this->error('该手机号还没有注册哦！');
        if (empty($user['status'])) $this->error('该用户账号状态异常！');
        if (md5($data['password']) === $user['password']) {
            $this->success('手机登录成功！', UserAdminService::set($map, [], $this->type, true));
        } else {
            $this->error('账号登录失败，请稍候再试！');
        }
    }

    /**
     * 用户统一注册入口
     * @throws \think\admin\Exception
     * @throws \think\db\exception\DbException
     */
    public function register()
    {
        $data = $this->_vali([
            'region_province.default' => '',
            'region_city.default'     => '',
            'region_area.default'     => '',
            'username.default'        => '',
            'phone.mobile'            => '手机格式错误！',
            'phone.require'           => '手机不能为空！',
            'verify.require'          => '验证码不能为空！',
            'password.require'        => '登录密码不能为空！',
        ]);
        if (!MessageService::instance()->checkVerifyCode($data['verify'], $data['phone'])) {
            $this->error('手机短信验证失败！');
        }
        $map = ['phone' => $data['phone'], 'deleted' => 0];
        if (DataUser::mk()->where($map)->count() > 0) {
            $this->error('手机号已注册，请使用其它手机号！');
        }
        $data['password'] = md5($data['password']);
        $user = UserAdminService::set($map, $data, $this->type, true);
        empty($user) ? $this->error('手机注册失败！') : $this->success('用户注册成功！', $user);
    }

    /**
     * 发送短信验证码
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\DbException
     * @throws \think\db\exception\ModelNotFoundException
     */
    public function sendsms()
    {
        $data = $this->_vali([
            'phone.mobile'   => '手机号格式错误！',
            'phone.require'  => '手机号不能为空！',
            'secure.require' => '安全码不能为空！',
        ]);
        if ($data['secure'] !== sysconf('zt.secure_code')) $this->error('接口安全码错误！');
        [$state, $message, $data] = MessageService::instance()->sendVerifyCode($data['phone']);
        $state ? $this->success($message, $data) : $this->error($message, $data);
    }
}