# 导入 Django 管理后台相关模块
from django.contrib.admin import AdminSite
from django.contrib.admin.models import LogEntry
from django.contrib.sites.admin import SiteAdmin
from django.contrib.sites.models import Site

# 导入各应用的 admin 配置和模型
from accounts.admin import *  # 用户管理后台配置
from blog.admin import *  # 博客功能后台配置
from blog.models import *  # 博客功能模型
from comments.admin import *  # 评论功能后台配置
from comments.models import *  # 评论功能模型
from djangoblog.logentryadmin import LogEntryAdmin  # 自定义的日志条目管理类
from oauth.admin import *  # 第三方登录后台配置
from oauth.models import *  # 第三方登录模型
from owntracks.admin import *  # OwnTracks 位置追踪后台配置
from owntracks.models import *  # OwnTracks 模型
from servermanager.admin import *  # 服务器命令管理后台配置
from servermanager.models import *  # 服务器命令模型


class DjangoBlogAdminSite(AdminSite):
    """
    自定义 Django 管理后台站点类，用于替代默认的 admin.site。

    功能说明：
    - 继承自 Django 的 AdminSite，可高度定制管理后台的行为和界面。
    - 设置了自定义的页面标题和头部文本。
    - 限制访问权限，仅超级用户可访问。

    属性说明：
    site_header: 管理后台页面顶部显示的标题（浏览器标签页标题）。
    site_title: 管理后台页面中显示的主标题（通常在左上角）。
    """
    site_header = 'djangoblog administration'  # 浏览器标签和页面标题
    site_title = 'djangoblog site admin'  # 页面中显示的主标题

    def __init__(self, name='admin'):
        """
        初始化自定义管理站点。

        参数:
            name (str): 站点名称，默认为 'admin'。
                        用于 URL 命名空间等场景。
        """
        super().__init__(name)  # 调用父类初始化方法

    def has_permission(self, request):
        """
        重写权限检查方法，控制谁可以访问此管理后台。

        参数:
            request (HttpRequest): 当前请求对象。

        返回值:
            bool: 仅当用户是超级用户（is_superuser）时返回 True，否则返回 False。
                  这比 is_staff 更严格，确保只有最高权限用户可访问。
        """
        return request.user.is_superuser

    # 被注释的 get_urls 方法示例：
    # 可用于向管理后台添加自定义视图（如刷新缓存等运维功能）
    # 示例中原本注册了一个 /admin/refresh/ 路径，指向 refresh_memcache 视图
    # 通过 self.admin_view 包装，确保只有通过认证的管理员才能访问
    #
    # def get_urls(self):
    #     urls = super().get_urls()
    #     from django.urls import path
    #     from blog.views import refresh_memcache
    #
    #     my_urls = [
    #         path('refresh/', self.admin_view(refresh_memcache), name="refresh"),
    #     ]
    #     return urls + my_urls


# 实例化自定义的管理站点
admin_site = DjangoBlogAdminSite(name='admin')
"""
创建一个 DjangoBlogAdminSite 的实例，命名为 'admin'。
这个实例将作为整个项目的管理后台入口，替代 Django 默认的 admin.site。
所有后续的 register 调用都使用这个自定义站点。
"""

# 注册博客功能相关模型到自定义管理后台
admin_site.register(Article, ArticlelAdmin)  # 文章模型 + 自定义管理配置
admin_site.register(Category, CategoryAdmin)  # 分类模型 + 自定义管理配置
admin_site.register(Tag, TagAdmin)  # 标签模型 + 自定义管理配置
admin_site.register(Links, LinksAdmin)  # 友情链接模型 + 自定义管理配置
admin_site.register(SideBar, SideBarAdmin)  # 侧边栏模型 + 自定义管理配置
admin_site.register(BlogSettings, BlogSettingsAdmin)  # 博客设置模型 + 自定义管理配置

# 注册服务器管理相关模型
admin_site.register(commands, CommandsAdmin)  # 服务器命令模型 + 自定义管理配置
admin_site.register(EmailSendLog, EmailSendLogAdmin)  # 邮件发送日志模型 + 自定义管理配置

# 注册用户相关模型
admin_site.register(BlogUser, BlogUserAdmin)  # 博客用户模型 + 自定义管理配置

# 注册评论相关模型
admin_site.register(Comment, CommentAdmin)  # 评论模型 + 自定义管理配置

# 注册第三方登录相关模型
admin_site.register(OAuthUser, OAuthUserAdmin)  # OAuth 用户模型 + 自定义管理配置
admin_site.register(OAuthConfig, OAuthConfigAdmin)  # OAuth 配置模型 + 自定义管理配置

# 注册位置追踪相关模型
admin_site.register(OwnTrackLog, OwnTrackLogsAdmin)  # OwnTrack 日志模型 + 自定义管理配置

# 注册 Django 内置的 Site 模型（使用默认 SiteAdmin）
admin_site.register(Site, SiteAdmin)

# 注册 Django 内置的管理操作日志 LogEntry 模型（使用自定义的 LogEntryAdmin）
admin_site.register(LogEntry, LogEntryAdmin)
"""
通过以上 register 调用，所有注册的模型都将在自定义的管理后台界面中显示，
并使用对应的 Admin 类进行展示和操作控制。
最终，这个 admin_site 实例会在 urls.py 中作为管理后台的视图入口使用。
"""