# 导入Django Admin相关核心组件
from django.contrib.admin import AdminSite  # Django Admin站点基类
from django.contrib.admin.models import LogEntry  # 管理员操作日志模型
from django.contrib.sites.admin import SiteAdmin  # 站点管理的默认Admin配置
from django.contrib.sites.models import Site  # Django内置的站点模型（用于多站点管理）

# 导入各应用的Admin配置和数据模型
from accounts.admin import *  # 账户相关的Admin配置
from blog.admin import *      # 博客核心功能（文章、分类等）的Admin配置
from blog.models import *     # 博客核心数据模型
from comments.admin import *  # 评论功能的Admin配置
from comments.models import * # 评论相关数据模型
from djangoblog.logentryadmin import LogEntryAdmin  # 自定义的操作日志Admin配置
from oauth.admin import *     # 第三方登录（OAuth）的Admin配置
from oauth.models import *    # OAuth相关数据模型
from owntracks.admin import * # 位置追踪（OwnTracks）的Admin配置
from owntracks.models import *# OwnTracks相关数据模型
from servermanager.admin import *  # 服务器管理的Admin配置
from servermanager.models import * # 服务器管理相关数据模型


class DjangoBlogAdminSite(AdminSite):
    """
    自定义的Django Admin站点类，继承自Django内置的AdminSite
    
    作用：通过重写基类属性和方法，定制Admin后台的外观和权限控制
    """
    # 定制Admin站点的页面头部标题（显示在登录页和后台顶部导航栏）
    site_header = 'djangoblog administration'
    # 定制Admin站点的页面标题（显示在浏览器标签页）
    site_title = 'djangoblog site admin'

    def __init__(self, name='admin'):
        """
        初始化自定义Admin站点
        
        :param name: 站点名称，默认'admin'（与Django默认Admin站点名称保持一致，避免路由冲突）
        """
        super().__init__(name)  # 调用父类构造方法初始化

    def has_permission(self, request):
        """
        重写权限检查方法，控制谁能访问Admin后台
        
        :param request: HTTP请求对象，包含当前用户信息
        :return: 布尔值，True表示允许访问，False表示拒绝访问
        此处限制仅超级用户（is_superuser）可访问，比默认的is_staff更严格
        """
        return request.user.is_superuser

    # 以下为注释掉的自定义URL示例（可根据需求启用）
    # def get_urls(self):
    #     """
    #     扩展Admin站点的URL路由，添加自定义功能入口
    #     """
    #     # 先获取父类默认的URL配置
    #     urls = super().get_urls()
    #     # 导入URL路径处理和自定义视图
    #     from django.urls import path
    #     from blog.views import refresh_memcache  # 示例：缓存刷新视图
    #
    #     # 定义自定义URL规则，使用admin_view()包装确保权限检查
    #     my_urls = [
    #         path('refresh/', self.admin_view(refresh_memcache), name="refresh"),
    #     ]
    #     # 合并默认URL和自定义URL（自定义URL优先）
    #     return urls + my_urls


# 实例化自定义的Admin站点，名称为'admin'（与Django默认Admin站点名称一致，接管后台）
admin_site = DjangoBlogAdminSite(name='admin')

# 注册数据模型与对应的Admin配置到自定义Admin站点
# 博客核心内容
admin_site.register(Article, ArticlelAdmin)    # 文章模型 + 其Admin配置
admin_site.register(Category, CategoryAdmin)  # 分类模型 + 其Admin配置
admin_site.register(Tag, TagAdmin)            # 标签模型 + 其Admin配置
admin_site.register(Links, LinksAdmin)        # 友情链接模型 + 其Admin配置
admin_site.register(SideBar, SideBarAdmin)    # 侧边栏模型 + 其Admin配置
admin_site.register(BlogSettings, BlogSettingsAdmin)  # 博客设置模型 + 其Admin配置

# 服务器管理
admin_site.register(commands, CommandsAdmin)        # 命令模型 + 其Admin配置
admin_site.register(EmailSendLog, EmailSendLogAdmin)# 邮件发送日志模型 + 其Admin配置

# 账户管理
admin_site.register(BlogUser, BlogUserAdmin)  # 自定义用户模型 + 其Admin配置

# 评论管理
admin_site.register(Comment, CommentAdmin)    # 评论模型 + 其Admin配置

# OAuth第三方登录
admin_site.register(OAuthUser, OAuthUserAdmin)      # OAuth用户模型 + 其Admin配置
admin_site.register(OAuthConfig, OAuthConfigAdmin)  # OAuth配置模型 + 其Admin配置

# 位置追踪
admin_site.register(OwnTrackLog, OwnTrackLogsAdmin)  # 位置日志模型 + 其Admin配置

# 站点管理（Django内置）
admin_site.register(Site, SiteAdmin)  # 站点模型 + Django默认的SiteAdmin配置

# 操作日志管理
admin_site.register(LogEntry, LogEntryAdmin)  # 管理员操作日志模型 + 自定义Admin配置