from django.apps import AppConfig
from django.utils.translation import ugettext_lazy as _

from .pages import user_profile, usercp, users_list


class MisagoUsersConfig(AppConfig):
    name = 'misago.users'
    label = 'misago_users'
    verbose_name = "Misago Auth"

    def ready(self):
        from . import signals as _

        self.register_default_usercp_pages()
        self.register_default_users_list_pages()
        self.register_default_user_profile_pages()

    def register_default_usercp_pages(self):
        usercp.add_section(
            link='misago:usercp-change-forum-options',
            name=_('Forum options'),
            component='forum-options',
            icon='settings',
        )
        usercp.add_section(
            link='misago:usercp-edit-details',
            name=_('Edit details'),
            component='edit-details',
            icon='person_outline',
        )
        usercp.add_section(
            link='misago:usercp-change-username',
            name=_('Change username'),
            component='change-username',
            icon='card_membership',
        )
        usercp.add_section(
            link='misago:usercp-change-email-password',
            name=_('Change email or password'),
            component='sign-in-credentials',
            icon='vpn_key',
        )

    def register_default_users_list_pages(self):
        users_list.add_section(
            link='misago:users-active-posters',
            component='active-posters',
            name=_('Active posters')
        )

    def register_default_user_profile_pages(self):
        def can_see_names_history(request, profile):
            if request.user.is_authenticated:
                is_account_owner = profile.pk == request.user.pk
                has_permission = request.user.acl_cache['can_see_users_name_history']
                return is_account_owner or has_permission
            else:
                return False

        def can_see_ban_details(request, profile):
            if request.user.is_authenticated:
                if request.user.acl_cache['can_see_ban_details']:
                    from .bans import get_user_ban
                    return bool(get_user_ban(profile))
                else:
                    return False
            else:
                return False

        user_profile.add_section(
            link='misago:user-posts',
            name=_("Posts"),
            icon='message',
            component='posts',
        )
        user_profile.add_section(
            link='misago:user-threads',
            name=_("Threads"),
            icon='forum',
            component='threads',
        )
        user_profile.add_section(
            link='misago:user-followers',
            name=_("Followers"),
            icon='favorite',
            component='followers',
        )
        user_profile.add_section(
            link='misago:user-follows',
            name=_("Follows"),
            icon='favorite_border',
            component='follows',
        )
        user_profile.add_section(
            link='misago:user-details',
            name=_("Details"),
            icon='person_outline',
            component='details',
        )
        user_profile.add_section(
            link='misago:username-history',
            name=_("Username history"),
            icon='card_membership',
            component='username-history',
            visible_if=can_see_names_history,
        )
        user_profile.add_section(
            link='misago:user-ban',
            name=_("Ban details"),
            icon='remove_circle_outline',
            component='ban-details',
            visible_if=can_see_ban_details,
        )
