{% macro forum_category_listing(forums, title, colour) %}
    {% from _self import forum_category_entry %}
    {% from 'macros.twig' import container_title %}

    <div class="container forum__categories"{% if colour is not null %} style="{{ colour|html_colour('--accent-colour') }}"{% endif %}>
        {{ container_title('<i class="fas fa-folder fa-fw"></i> ' ~ title) }}

        {% if forums|length > 0 %}
            <div class="forum__categories__list">
                {% for forum in forums %}
                    {{ forum_category_entry(forum) }}
                {% endfor %}
            </div>
        {% else %}
            <div class="forum__categories__empty">
                This category is empty.
            </div>
        {% endif %}
    </div>
{% endmacro %}

{% macro forum_header(title, breadcrumbs, omit_last_breadcrumb, title_url) %}
    <div class="container forum__header">
        {% if breadcrumbs is iterable and breadcrumbs|length > 0 %}
            <div class="forum__header__breadcrumbs">
                {% for name, url in breadcrumbs %}
                    {% if url != breadcrumbs|first %}
                        <div class="forum__header__breadcrumb__separator">
                            <i class="fas fa-chevron-right"></i>
                        </div>
                    {% endif %}

                    {% if not (omit_last_breadcrumb|default(false) and url == breadcrumbs|last) %}
                        <a href="{{ url }}" class="forum__header__breadcrumb">{{ name }}</a>
                    {% endif %}
                {% endfor %}
            </div>
        {% endif %}

        {% if title|length > 0 %}
            {% if title_url|length > 0 %}
                <a class="forum__header__title" href="{{ title_url }}">
                    {{ title }}
                </a>
            {% else %}
                <div class="forum__header__title">
                    {{ title }}
                </div>
            {% endif %}
        {% endif %}
    </div>
{% endmacro %}

{% macro forum_category_tools(info, perms, take, offset) %}
    {% from 'macros.twig' import pagination %}

    {% set can_topic = perms|perms_check(constant('MSZ_FORUM_PERM_CREATE_TOPIC')) %}
    {% set pag = pagination(
        info.forum_topic_count,
        take,
        offset,
        url_construct('/forum/forum.php', {'f':info.forum_id}),
        false,
        null,
        5
    ) %}

    {% if can_topic or pag|trim|length > 0 %}
        <div class="container forum__actions">
            <div class="forum__actions__buttons">
                {% if can_topic %}
                    <a href="{{ url_construct('/forum/posting.php', {'f':info.forum_id}) }}" class="input__button">New Topic</a>
                {% endif %}
            </div>

            <div class="forum__actions__pagination">
                {{ pag }}
            </div>
        </div>
    {% endif %}
{% endmacro %}

{% macro forum_topic_tools(info, take, offset, can_reply) %}
    {% from 'macros.twig' import pagination %}

    {% set pag = pagination(
        info.topic_post_count,
        take,
        offset,
        url_construct('/forum/topic.php', {'t':info.topic_id}),
        false,
        null,
        5
    ) %}

    {% if can_reply or pag|trim|length > 0 %}
        <div class="container forum__actions">
            <div class="forum__actions__buttons">
                {% if can_reply %}
                    <a href="/forum/posting.php?t={{ info.topic_id }}" class="input__button">Reply</a>
                {% endif %}
            </div>

            <div class="forum__actions__pagination">
                {{ pag }}
            </div>
        </div>
    {% endif %}
{% endmacro %}

{% macro forum_category_entry(forum, forum_unread, forum_type) %}
    {% set forum_type = forum_type|default(null) %}
    {% set forum_unread = forum_unread|default(forum.forum_unread|default(false)) ? 'unread' : 'read' %}

    {% if forum_type is null %}
        {% if forum.forum_archived is defined and forum.forum_archived %}
            {% set forum_type = 'fas fa-archive' %}
        {% elseif forum.forum_type is defined and forum.forum_type != constant('MSZ_FORUM_TYPE_DISCUSSION') %}
            {% if forum.forum_type == constant('MSZ_FORUM_TYPE_LINK') %}
                {% set forum_type = 'fas fa-link' %}
            {% elseif forum.forum_type == constant('MSZ_FORUM_TYPE_CATEGORY') %}
                {% set forum_type = 'fas fa-folder' %}
            {% endif %}
        {% else %}
            {% set forum_type = 'fas fa-comments' %}
        {% endif %}
    {% endif %}

    <div class="forum__category">
        <a href="/forum/forum.php?f={{ forum.forum_id }}" class="forum__category__link"></a>

        <div class="forum__category__container">
            <div class="forum__category__icon forum__category__icon--{{ forum_unread }}">
                <i class="{{ forum_type }}"></i>
            </div>

            <div class="forum__category__details">
                <div class="forum__category__title">
                    {{ forum.forum_name }}
                </div>

                <div class="forum__category__description">
                    {{ forum.forum_description|nl2br }}
                </div>

                {% if forum.forum_subforums is defined and forum.forum_subforums|length > 0 %}
                    <div class="forum__category__subforums">
                        {% for subforum in forum.forum_subforums %}
                            <a href="/forum/forum.php?f={{ subforum.forum_id }}"
                                class="forum__category__subforum{% if subforum.forum_unread %} forum__category__subforum--unread{% endif %}">
                                {{ subforum.forum_name }}
                            </a>
                        {% endfor %}
                    </div>
                {% endif %}
            </div>

            {% if forum.forum_type == constant('MSZ_FORUM_TYPE_LINK') %}
                {% if forum.forum_link_clicks is not null %}
                    <div class="forum__category__stats">
                        <div class="forum__category__stat" title="Clicks">{{ forum.forum_link_clicks|number_format }}</div>
                    </div>
                {% endif %}
            {% elseif forum.forum_type != constant('MSZ_FORUM_TYPE_CATEGORY') %}
                <div class="forum__category__stats">
                    <div class="forum__category__stat" title="Topics">{{ forum.forum_topic_count|number_format }}</div>
                    <div class="forum__category__stat" title="Posts">{{ forum.forum_post_count|number_format }}</div>
                </div>
            {% endif %}

            {% if forum.forum_type == constant('MSZ_FORUM_TYPE_DISCUSSION') or forum.forum_link_clicks is not null %}
                <div class="forum__category__activity{% if forum.forum_link_clicks is not null %} forum__category__activity--empty{% endif %}">
                    {% if forum.forum_type != constant('MSZ_FORUM_TYPE_LINK') %}
                        {% if forum.recent_topic_id is null %}
                            <div class="forum__category__activity__none">
                                There are no posts in this forum yet.
                            </div>
                        {% else %}
                            <div class="forum__category__activity__details">
                                <a class="forum__category__activity__post"
                                    href="/forum/topic.php?p={{ forum.recent_post_id }}#p{{ forum.recent_post_id }}">
                                    {{ forum.recent_topic_title }}
                                </a>

                                <div class="forum__category__activity__info">
                                    <time datetime="{{ forum.recent_post_created|date('c') }}"
                                        title="{{ forum.recent_post_created|date('r') }}">{{ forum.recent_post_created|time_diff }}</time>
                                    {% if forum.recent_post_user_id is not null %}
                                        by
                                        <a href="/profile.php?u={{ forum.recent_post_user_id }}" class="forum__category__username"
                                            style="{{ forum.recent_post_user_colour|html_colour }}">
                                            {{ forum.recent_post_username }}
                                        </a>
                                    {% endif %}
                                </div>
                            </div>

                            {% if forum.recent_post_user_id is not null %}
                                <a href="/profile.php?u={{ forum.recent_post_user_id }}"
                                    class="avatar forum__category__avatar"
                                    style="background-image:url('/profile.php?u={{ forum.recent_post_user_id }}&amp;m=avatar')">
                                </a>
                            {% endif %}
                        {% endif %}
                    {% endif %}
                </div>
            {% endif %}
        </div>
    </div>
{% endmacro %}

{% macro forum_topic_locked(locked, archived) %}
    {% if locked is not null or archived %}
        <div class="container forum__status">
            <div class="forum__status__icon">
                <i class="fas fa-{{ archived ? 'archive' : 'lock' }}"></i>
            </div>
            <div class="forum__status__text">
                {% if archived %}
                    This topic has been <span class="forum__status__emphasis">archived</span>.
                {% else %}
                    This topic was locked
                    <time class="forum__status__emphasis"
                        datetime="{{ locked|date('c') }}"
                        title="{{ locked|date('r') }}">{{ locked|time_diff }}</time>.
                {% endif %}
            </div>
        </div>
    {% endif %}
{% endmacro %}

{% macro forum_topic_listing(topics) %}
    {% from _self import forum_topic_entry %}
    {% from 'macros.twig' import container_title %}

    <div class="container forum__topics">
        {{ container_title('<i class="fas fa-comments fa-fw"></i> Topics') }}

        <div class="forum__topics__list">
            {% if topics|length > 0 %}
                {% for topic in topics %}
                    {{ forum_topic_entry(topic) }}
                {% endfor %}
            {% else %}
                <div class="forum__topics__empty">
                    There are no topics in this forum.
                </div>
            {% endif %}
        </div>
    </div>
{% endmacro %}

{% macro forum_topic_entry(topic, topic_type, topic_unread) %}
    {% set topic_type = topic_type|default(null) %}
    {% set topic_unread = topic_unread|default(topic.topic_unread|default(false)) ? 'unread' : 'read' %}

    {% if topic_type is null %}
        {% if topic.topic_deleted is defined and topic.topic_deleted is not null %}
            {% set topic_type = 'fas fa-trash-alt' %}
        {% elseif topic.topic_type is defined and topic.topic_type != constant('MSZ_TOPIC_TYPE_DISCUSSION') %}
            {% if topic.topic_type == constant('MSZ_TOPIC_TYPE_ANNOUNCEMENT') or topic.topic_type == constant('MSZ_TOPIC_TYPE_GLOBAL_ANNOUNCEMENT') %}
                {% set topic_type = 'fas fa-bullhorn' %}
            {% elseif topic.topic_type == constant('MSZ_TOPIC_TYPE_STICKY') %}
                {% set topic_type = 'fas fa-thumbtack' %}
            {% endif %}
        {% elseif topic.topic_locked is defined and topic.topic_locked is not null %}
            {% set topic_type = 'fas fa-lock' %}
        {% else %}
            {% set topic_type = 'fas fa-comment' %}
        {% endif %}
    {% endif %}

    <div class="forum__topic{% if topic.topic_deleted is not null %} forum__topic--deleted{% endif %}">
        <a href="/forum/topic.php?t={{ topic.topic_id }}" class="forum__topic__link"></a>

        <div class="forum__topic__container">
            <div class="forum__topic__icon forum__topic__icon--{{ topic_unread }}">
                <i class="{{ topic_type }}"></i>
            </div>

            <div class="forum__topic__details">
                <div class="forum__topic__title">
                    <span class="forum__topic__title__inner">
                        {{ topic.topic_title }}
                    </span>
                </div>

                <div class="forum__topic__info">
                    {% if topic.author_id is not null %}
                        by <a
                            href="/profile.php?u={{ topic.author_id }}"
                            class="forum__topic__username"
                            style="{{ topic.author_colour|html_colour }}">{{ topic.author_name }}</a>,

                    {% endif %}
                    <time datetime="{{ topic.topic_created|date('c') }}" title="{{ topic.topic_created|date('r') }}">{{ topic.topic_created|time_diff }}</time>
                </div>
            </div>

            <div class="forum__topic__stats">
                <div class="forum__topic__stat" title="Posts">{{ topic.topic_post_count|number_format }}</div>
                <div class="forum__topic__stat" title="Views">{{ topic.topic_view_count|number_format }}</div>
            </div>

            <div class="forum__topic__activity">
                <div class="forum__topic__activity__details">
                    {% if topic.respondent_id is not null %}
                        <a href="/profile.php?u={{ topic.respondent_id }}" class="forum__topic__username"
                            style="{{ topic.respondent_colour|html_colour }}">{{ topic.respondent_name }}</a>
                    {% endif %}

                    <a class="forum__topic__activity__post"
                        href="/forum/topic.php?p={{ topic.response_id }}#p{{ topic.response_id }}">
                        <time datetime="{{ topic.response_created|date('c') }}"
                            title="{{ topic.response_created|date('r') }}">{{ topic.response_created|time_diff }}</time>
                    </a>
                </div>

                {% if topic.respondent_id is not null %}
                    <a href="/profile.php?u={{ topic.respondent_id }}"
                        class="avatar forum__topic__avatar"
                        style="background-image:url('/profile.php?u={{ topic.respondent_id }}&amp;m=avatar')">
                    </a>
                {% endif %}
            </div>
        </div>
    </div>
{% endmacro %}

{% macro forum_post_listing(posts, user_id, perms) %}
    {% from _self import forum_post_entry %}

    {% for post in posts %}
        {{ forum_post_entry(
            post,
            perms|perms_check(constant('MSZ_FORUM_PERM_CREATE_POST')),
            perms|perms_check(constant(user_id == post.poster_id ? 'MSZ_FORUM_PERM_EDIT_POST' : 'MSZ_FORUM_PERM_EDIT_ANY_POST')),
            perms|perms_check(constant(user_id == post.poster_id ? 'MSZ_FORUM_PERM_DELETE_POST' : 'MSZ_FORUM_PERM_DELETE_ANY_POST'))
        ) }}
    {% endfor %}
{% endmacro %}

{% macro forum_post_entry(post, can_post, can_edit, can_delete) %}
    {% set is_deleted = post.post_deleted is not null %}

    <div class="container forum__post{% if is_deleted %} forum__post--deleted{% endif %}" id="p{{ post.post_id }}" style="{{ post.poster_colour|html_colour('--accent-colour') }}">
        <div class="forum__post__info">
            <div class="forum__post__info__background"></div>
            <div class="forum__post__info__content">
                {% if post.poster_id is not null %}
                    <a class="avatar forum__post__avatar"
                        style="background-image:url('/profile.php?u={{ post.poster_id }}&amp;m=avatar');"
                        href="/profile.php?u={{ post.poster_id }}">
                    </a>

                    <a class="forum__post__username" href="/profile.php?u={{ post.poster_id }}">{{ post.poster_name }}</a>

                    <div class="forum__post__icons">
                        <div class="flag flag--{{ post.poster_country|lower }}" title="{{ post.poster_country|country_name }}"></div>
                        <div class="forum__post__posts-count">{{ post.poster_post_count|number_format }} posts</div>
                    </div>

                    <div class="forum__post__joined">
                        joined <time datetime="{{ post.poster_joined|date('c') }}" title="{{ post.poster_joined|date('r') }}">{{ post.poster_joined|time_diff }}</time>
                    </div>
                {% else %}
                    <div class="forum__post__username">Deleted User</div>
                {% endif %}
            </div>
        </div>

        <div class="forum__post__content">
            <div class="forum__post__details">
                <a class="forum__post__datetime" href="/forum/topic.php?t={{ post.topic_id }}#p{{ post.post_id }}">
                    <time datetime="{{ post.post_created|date('c') }}" title="{{ post.post_created|date('r') }}">{{ post.post_created|time_diff }}</time>
                    {% if post.post_edited is not null %}
                        (edited <time datetime="{{ post.post_edited|date('c') }}" title="{{ post.post_edited|date('r') }}">{{ post.post_edited|time_diff }}</time>)
                    {% endif %}
                </a>

                <a class="forum__post__id" href="/forum/topic.php?p={{ post.post_id }}#p{{ post.post_id }}">
                    #{{ post.post_id }}
                </a>
            </div>

            <div class="forum__post__text{% if post.post_parse == constant('MSZ_PARSER_MARKDOWN') %} markdown{% endif %}">
                {{ post.post_text|escape|parse_text(post.post_parse)|raw }}
            </div>

            {% if can_post or can_edit or can_delete %}
                <div class="forum__post__actions">
                    {% if is_deleted %}
                        <a href="/forum/posting.php?p={{ post.post_id }}&amp;m=restore" class="forum__post__action"><i class="fas fa-magic fa-fw"></i> Restore</a>
                        <a href="/forum/posting.php?p={{ post.post_id }}&amp;m=nuke" class="forum__post__action"><i class="fas fa-radiation-alt fa-fw"></i> Permanently Delete</a>
                    {% else %}
                        {# if can_post %}
                            <a href="/forum/posting.php?p={{ post.post_id }}&amp;m=quote" class="forum__post__action"><i class="fas fa-quote-left fa-fw"></i> Quote</a>
                        {% endif #}
                        {% if can_edit %}
                            <a href="/forum/posting.php?p={{ post.post_id }}&amp;m=edit" class="forum__post__action"><i class="fas fa-edit fa-fw"></i> Edit</a>
                        {% endif %}
                        {# if can_delete %}
                            <a href="/forum/posting.php?p={{ post.post_id }}&amp;m=delete" class="forum__post__action"><i class="far fa-trash-alt fa-fw"></i> Delete</a>
                        {% endif #}
                    {% endif %}
                </div>
            {% endif %}
        </div>
    </div>
{% endmacro %}