"""
project/sidebar.py
"""

from django.contrib.auth.context_processors import PermWrapper
from django.urls import reverse
from django.utils.translation import gettext_lazy as _

from base.templatetags.basefilters import is_reportingmanager
from project.methods import (
    any_project_manager,
    any_project_member,
    any_task_manager,
    any_task_member,
    get_all_project_members_and_managers,
    has_subordinates,
)

MENU = _("Project")
IMG_SRC = "images/ui/project.png"
ACCESSIBILITY = "project.sidebar.menu_accessibilty"

SUBMENUS = [
    {
        "menu": _("Dashboard"),
        "redirect": reverse("project-dashboard-view"),
        "accessibility": "project.sidebar.dashboard_accessibility",
    },
    {
        "menu": _("Projects"),
        "redirect": reverse("project-view"),
        "accessibility": "project.sidebar.project_accessibility",
    },
    {
        "menu": _("Tasks"),
        "redirect": reverse("task-all"),
        "accessibility": "project.sidebar.task_accessibility",
    },
    {
        "menu": _("Timesheet"),
        "redirect": reverse("view-time-sheet"),
        "accessibility": "project.sidebar.timesheet_accessibility",
    },
]


def menu_accessibilty(
    request, _menu: str = "", user_perms: PermWrapper = [], *args, **kwargs
) -> bool:
    user = request.user
    return (
        "project" in user_perms
        # or has_subordinates(request)
        or any_project_manager(user)
        or any_project_member(user)
        or any_task_manager(user)
        or any_task_member(user)
    )


def dashboard_accessibility(request, submenu, user_perms, *args, **kwargs):
    user = request.user
    if (
        user.has_perm("project.view_project")
        # or has_subordinates(request)
        or is_reportingmanager(user)
        or any_project_manager(user)
        or any_task_manager(user)
    ):
        return True
    else:
        return False


def project_accessibility(request, submenu, user_perms, *args, **kwargs):
    user = request.user
    if (
        user.has_perm("project.view_project")
        # or has_subordinates(request)
        or any_project_manager(user)
        or any_project_member(user)
        or any_task_manager(user)
        or any_task_member(user)
    ):
        return True
    else:
        return False


def task_accessibility(request, submenu, user_perms, *args, **kwargs):
    user = request.user
    if (
        user.has_perm("project.view_task")
        # or has_subordinates(request)
        or any_project_manager(user)
        or any_project_member(user)
        or any_task_manager(user)
        or any_task_member(user)
    ):
        return True
    else:
        return False


def timesheet_accessibility(request, submenu, user_perms, *args, **kwargs):
    user = request.user
    if (
        user.has_perm("project.view_timesheet")
        # or has_subordinates(request)
        or any_project_manager(user)
        or any_project_member(user)
        or any_task_manager(user)
        or any_task_member(user)
    ):
        return True
    else:
        return False
