from app import create_app
from app.models.database import db
from app.models.user import Role
from app.models.permission import Permission
import logging

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)


def init_permissions():
    """初始化系统权限"""
    logger.info("开始初始化系统权限...")

    # 只定义管理类权限，对应现有的 @admin_required 装饰的路由
    permissions = [
        # 公告管理权限
        {'code': 'manage_announcements', 'name': '公告管理', 'description': '允许管理系统公告（发布、编辑、删除、置顶等）'},

        # 图书管理权限
        {'code': 'manage_books', 'name': '图书管理', 'description': '允许管理图书（添加、编辑、删除图书）'},
        {'code': 'manage_categories', 'name': '分类管理', 'description': '允许管理图书分类'},
        {'code': 'import_export_books', 'name': '导入导出图书', 'description': '允许批量导入和导出图书数据'},

        # 借阅管理权限
        {'code': 'manage_borrows', 'name': '借阅管理', 'description': '允许管理全系统借阅记录和处理借还书操作'},
        {'code': 'manage_overdue', 'name': '逾期管理', 'description': '允许查看和处理逾期借阅'},

        # 库存管理权限
        {'code': 'manage_inventory', 'name': '库存管理', 'description': '允许查看和调整图书库存'},

        # 日志权限
        {'code': 'view_logs', 'name': '查看日志', 'description': '允许查看系统操作日志'},

        # 统计权限
        {'code': 'view_statistics', 'name': '查看统计', 'description': '允许查看统计分析数据'},

        # 用户管理权限
        {'code': 'manage_users', 'name': '用户管理', 'description': '允许管理用户（添加、编辑、禁用、删除用户）'},
        {'code': 'manage_roles', 'name': '角色管理', 'description': '允许管理角色和权限'},
    ]

    # 添加权限记录
    added_count = 0
    updated_count = 0

    for perm_data in permissions:
        # 检查权限是否已存在
        existing_perm = Permission.query.filter_by(code=perm_data['code']).first()

        if existing_perm:
            # 更新现有权限信息
            existing_perm.name = perm_data['name']
            existing_perm.description = perm_data['description']
            updated_count += 1
        else:
            # 创建新权限
            permission = Permission(**perm_data)
            db.session.add(permission)
            added_count += 1

    # 提交所有权限
    db.session.commit()
    logger.info(f"权限初始化完成: 新增 {added_count} 个, 更新 {updated_count} 个")

    # 处理角色权限分配
    assign_role_permissions()


def assign_role_permissions():
    """为系统默认角色分配权限"""
    logger.info("开始分配角色权限...")

    # 获取所有权限
    all_permissions = Permission.query.all()

    # 获取系统内置角色
    admin_role = Role.query.get(1)  # 管理员角色
    user_role = Role.query.get(2)  # 普通用户角色

    if admin_role and user_role:
        # 管理员拥有所有权限
        admin_role.permissions = all_permissions

        # 普通用户无需特殊管理权限
        user_role.permissions = []

        db.session.commit()
        logger.info(f"管理员角色分配了 {len(all_permissions)} 个权限")
        logger.info(f"普通用户角色无管理权限")
    else:
        logger.error("无法找到内置角色，请确保角色表已正确初始化")


def main():
    """主函数"""
    app = create_app()
    with app.app_context():
        init_permissions()


if __name__ == "__main__":
    main()
