from django.urls import reverse
from django.utils.translation import gettext_lazy as _

from . import ThreadType
from ...categories import THREADS_ROOT_NAME


class Thread(ThreadType):
    root_name = THREADS_ROOT_NAME

    def get_category_name(self, category):
        if category.level:
            return category.name
        return _("None (will become top level category)")

    def get_category_absolute_url(self, category):
        if category.level:
            return reverse(
                "misago:category", kwargs={"pk": category.pk, "slug": category.slug}
            )

        return reverse("misago:threads")

    def get_category_last_thread_url(self, category):
        return reverse(
            "misago:thread",
            kwargs={"slug": category.last_thread_slug, "pk": category.last_thread_id},
        )

    def get_category_last_thread_new_url(self, category):
        return reverse(
            "misago:thread-new",
            kwargs={"slug": category.last_thread_slug, "pk": category.last_thread_id},
        )

    def get_category_last_post_url(self, category):
        return reverse(
            "misago:thread-last",
            kwargs={"slug": category.last_thread_slug, "pk": category.last_thread_id},
        )

    def get_thread_absolute_url(self, thread, page=1):
        if page > 1:
            return reverse(
                "misago:thread",
                kwargs={"slug": thread.slug, "pk": thread.pk, "page": page},
            )

        return reverse("misago:thread", kwargs={"slug": thread.slug, "pk": thread.pk})

    def get_thread_last_post_url(self, thread):
        return reverse(
            "misago:thread-last", kwargs={"slug": thread.slug, "pk": thread.pk}
        )

    def get_thread_new_post_url(self, thread):
        return reverse(
            "misago:thread-new", kwargs={"slug": thread.slug, "pk": thread.pk}
        )

    def get_thread_best_answer_url(self, thread):
        return reverse(
            "misago:thread-best-answer", kwargs={"slug": thread.slug, "pk": thread.pk}
        )

    def get_thread_unapproved_post_url(self, thread):
        return reverse(
            "misago:thread-unapproved", kwargs={"slug": thread.slug, "pk": thread.pk}
        )

    def get_thread_api_url(self, thread):
        return reverse("misago:api:thread-detail", kwargs={"pk": thread.pk})

    def get_thread_editor_api_url(self, thread):
        return reverse("misago:api:thread-post-editor", kwargs={"thread_pk": thread.pk})

    def get_thread_merge_api_url(self, thread):
        return reverse("misago:api:thread-merge", kwargs={"pk": thread.pk})

    def get_thread_poll_api_url(self, thread):
        return reverse("misago:api:thread-poll-list", kwargs={"thread_pk": thread.pk})

    def get_thread_posts_api_url(self, thread):
        return reverse("misago:api:thread-post-list", kwargs={"thread_pk": thread.pk})

    def get_poll_api_url(self, poll):
        return reverse(
            "misago:api:thread-poll-detail",
            kwargs={"thread_pk": poll.thread_id, "pk": poll.pk},
        )

    def get_poll_votes_api_url(self, poll):
        return reverse(
            "misago:api:thread-poll-votes",
            kwargs={"thread_pk": poll.thread_id, "pk": poll.pk},
        )

    def get_post_merge_api_url(self, thread):
        return reverse("misago:api:thread-post-merge", kwargs={"thread_pk": thread.pk})

    def get_post_move_api_url(self, thread):
        return reverse("misago:api:thread-post-move", kwargs={"thread_pk": thread.pk})

    def get_post_split_api_url(self, thread):
        return reverse("misago:api:thread-post-split", kwargs={"thread_pk": thread.pk})

    def get_post_absolute_url(self, post):
        return reverse(
            "misago:thread-post",
            kwargs={"slug": post.thread.slug, "pk": post.thread.pk, "post": post.pk},
        )

    def get_post_api_url(self, post):
        return reverse(
            "misago:api:thread-post-detail",
            kwargs={"thread_pk": post.thread_id, "pk": post.pk},
        )

    def get_post_likes_api_url(self, post):
        return reverse(
            "misago:api:thread-post-likes",
            kwargs={"thread_pk": post.thread_id, "pk": post.pk},
        )

    def get_post_editor_api_url(self, post):
        return reverse(
            "misago:api:thread-post-editor",
            kwargs={"thread_pk": post.thread_id, "pk": post.pk},
        )

    def get_post_edits_api_url(self, post):
        return reverse(
            "misago:api:thread-post-edits",
            kwargs={"thread_pk": post.thread_id, "pk": post.pk},
        )

    def get_post_read_api_url(self, post):
        return reverse(
            "misago:api:thread-post-read",
            kwargs={"thread_pk": post.thread_id, "pk": post.pk},
        )