from django import template
from django.urls import reverse

from oauth.oauthmanager import get_oauth_apps

# 注册Django模板标签库
register = template.Library()


@register.inclusion_tag('oauth/oauth_applications.html')
def load_oauth_applications(request):
    """
    自定义模板标签：加载OAuth认证应用程序列表

    功能：
    - 获取所有可用的OAuth应用配置
    - 生成每个OAuth应用的登录URL
    - 通过包含模板的方式渲染OAuth登录按钮

    参数：
    request: HttpRequest对象，用于获取当前请求路径

    返回：
    包含apps列表的字典，用于渲染模板
    """

    # 获取所有配置的OAuth应用
    applications = get_oauth_apps()

    if applications:
        # 获取OAuth登录的基础URL
        baseurl = reverse('oauth:oauthlogin')
        # 获取当前请求的完整路径（用于登录成功后跳转回原页面）
        path = request.get_full_path()

        # 为每个OAuth应用生成登录URL
        # 格式：/oauth/login/?type=github&next_url=/current/path/
        apps = list(map(lambda x: (
            x.ICON_NAME,  # OAuth应用类型标识（如：github、weibo等）
            '{baseurl}?type={type}&next_url={next}'.format(
                baseurl=baseurl,
                type=x.ICON_NAME,
                next=path
            )),
                        applications
                        ))
    else:
        # 如果没有配置任何OAuth应用，返回空列表
        apps = []

    # 返回模板上下文数据
    return {
        'apps': apps  # 包含(OAuth类型, 登录URL)元组的列表
    }