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

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

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

from utils.response import error_response
from utils.error_codes import ErrorCodes


def login_required(f):
    """登录验证装饰器"""
    @wraps(f)
    def decorated_function(*args, **kwargs):
        if 'user' not in session:
            return jsonify(error_response(ErrorCodes.UNAUTHORIZED)), 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(error_response(ErrorCodes.UNAUTHORIZED)), 401

        user = session.get('user', {})
        if user.get('role') != 'admin':
            return jsonify(error_response(ErrorCodes.FORBIDDEN, "权限不足，仅管理员可访问")), 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('auth.login'))
        return f(*args, **kwargs)
    return decorated_function