from flask import jsonify, request
from app.models import Users
from app.api.auths import Auth
from app import common
from app import db
from app.api import bp
from app.api.errors import bad_request
import re

# def init_api(app):
@bp.route('/register', methods=['POST'])
def register():
    """
    用户注册
    :return: json
    """
    data = request.get_json()
    if not data:
        return bad_request('You must post JSON data.')
    message = {}
    if 'username' not in data or not data.get('username', None):
        message['username'] = 'Please provide a valid username.'
    pattern = '^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$'
    if 'email' not in data or not re.match(pattern, data.get('email', None)):
        message['email'] = 'Please provide a valid email address.'
    if 'password' not in data or not data.get('password', None):
        message['password'] = 'Please provide a valid password.'

    if Users.query.filter_by(username=data.get('username', None)).first():
        message['username'] = 'Please use a different username.'
    if Users.query.filter_by(email=data.get('email', None)).first():
        message['email'] = 'Please use a different email address.'
    if message:
        return bad_request(message)
    user = Users(email=data['email'], username=data['username'], password=Users.set_password(Users, data['password']))
    result = Users.add(Users, user)
    if user.id:
        returnUser = {
            'id': user.id,
            'username': user.username,
            'email': user.email,
            'login_time': user.login_time
        }
        return jsonify(common.trueReturn(returnUser, "用户注册成功"))
    else:
        return jsonify(common.falseReturn('', '用户注册失败'))


@bp.route('/login', methods=['POST'])
def login():
    """
    用户登录
    :return: json
    """

    data = request.get_json()
    # username = data.get('username')
    # password = data.get('password')
    username = request.form.get('username')
    password = request.form.get('password')
    if (not username or not password):
        return jsonify(common.falseReturn('', '用户名和密码不能为空'))
    else:
        return Auth.authenticate(Auth, username, password)


@bp.route('/user', methods=['GET'])
def get():
    """
    获取用户信息
    :return: json
    """
    result = Auth.identify(Auth, request)
    print (result['status'],result['data'])
    if (result['status'] and result['data']):
        user = Users.get(Users, result['data'])
        returnUser = {
            'id': user.id,
            'username': user.username,
            'email': user.email,
            'login_time': user.login_time
        }
        result = common.trueReturn(returnUser, "请求成功")
    return jsonify(result)