from flask import Blueprint, request, jsonify, g
from app.services.auth import AuthService
from app.models.database.models import User

bp = Blueprint('api_auth', __name__, url_prefix='/api/auth')

@bp.route('/register', methods=['POST'])
def register():
    """用户注册API"""
    data = request.json
    
    if not data:
        return jsonify({'success': False, 'error': '请求数据无效'}), 400
    
    username = data.get('username')
    email = data.get('email')
    password = data.get('password')
    
    if not username or not email or not password:
        return jsonify({'success': False, 'error': '请填写所有必填字段'}), 400
    
    # 注册用户
    success, result = AuthService.register_user(username, email, password)
    
    if success:
        return jsonify({'success': True, 'user_id': result}), 201
    else:
        return jsonify({'success': False, 'error': result}), 400

@bp.route('/login', methods=['POST'])
def login():
    """用户登录API"""
    data = request.json
    
    if not data:
        return jsonify({'success': False, 'error': '请求数据无效'}), 400
    
    username_or_email = data.get('username')
    password = data.get('password')
    remember = data.get('remember', False)
    
    if not username_or_email or not password:
        return jsonify({'success': False, 'error': '请填写所有必填字段'}), 400
    
    # 验证用户
    user = AuthService.authenticate_user(username_or_email, password)
    
    if user:
        # 创建会话
        token = AuthService.create_session(user, remember)
        
        return jsonify({
            'success': True,
            'user': user.to_dict(),
            'token': token
        })
    else:
        return jsonify({'success': False, 'error': '用户名或密码错误'}), 401

@bp.route('/logout', methods=['POST'])
def logout():
    """用户登出API"""
    AuthService.logout()
    return jsonify({'success': True})

@bp.route('/profile', methods=['GET'])
def profile():
    """获取当前用户信息API"""
    user = AuthService.get_current_user()
    
    if not user:
        return jsonify({'success': False, 'error': '未登录'}), 401
    
    return jsonify({
        'success': True,
        'user': user.to_dict()
    }) 