# -*- coding: utf-8 -*-
"""
decorators.py — 权限验证装饰器

功能：
  - 登录验证装饰器
  - 角色权限验证装饰器
"""

from functools import wraps
from flask import session, jsonify, request, redirect, url_for


def login_required(f):
    """登录验证装饰器"""
    @wraps(f)
    def decorated_function(*args, **kwargs):
        if 'user' not in session:
            return jsonify({
                'success': False,
                'error': '未登录',
                'code': 401
            }), 401
        return f(*args, **kwargs)
    return decorated_function


def admin_required(f):
    """管理员权限装饰器"""
    @wraps(f)
    def decorated_function(*args, **kwargs):
        if 'user' not in session:
            return jsonify({
                'success': False,
                'error': '未登录',
                'code': 401
            }), 401

        user = session.get('user', {})
        if user.get('role') != 'admin':
            return jsonify({
                'success': False,
                'error': '权限不足，仅管理员可访问',
                'code': 403
            }), 403

        return f(*args, **kwargs)
    return decorated_function


def page_login_required(f):
    """
    页面级登录验证装饰器（用于页面路由）
    未登录时重定向到登录页，而不是返回 JSON
    """
    @wraps(f)
    def decorated_function(*args, **kwargs):
        if 'user' not in session:
            return redirect(url_for('login'))
        return f(*args, **kwargs)
    return decorated_function