# (c) cavaliba.com - home - home.py

from django.conf import settings
from django.shortcuts import redirect
from django.utils.translation import gettext_lazy as _


def redirect_noauth():
    """Return a redirect response to settings.CAVALIBA_PUBLIC_REDIRECT, the
    configured landing URL for unauthenticated/no-auth-required access."""

    return redirect(settings.CAVALIBA_PUBLIC_REDIRECT)


# --------------------------------------------
# predefined "app" entry points - shared registry consumed by both
# app_home.sidebar (sidebar app: entries) and app_home.dashboard (dashboard
# app: entries), hence living here rather than in either of those modules.
# --------------------------------------------
# keyname -> {url_name, url_kwargs?, url?, icon, label, permission}
# either url_name (+ optional url_kwargs, resolved via reverse()) or a raw
# url (external links) must be provided. permission=None means "visible to
# any authenticated user".

APP_REGISTRY = {
    "sirene": {
        "url_name": "app_sirene:private",
        "icon": "fa-sun-o",
        "label": _("Sirene Notification"),
        "permission": "p_sirene_access",
    },
    "sirene_archive": {
        "url_name": "app_sirene:archive",
        "icon": "fa-archive",
        "label": _("Sirene Archive"),
        "permission": "p_sirene_access",
    },
    "sms": {
        "url_name": "app_sirene:sms_send",
        "icon": "fa-paper-plane",
        "label": _("SMS Sarbacane"),
        "permission": "p_sirene_sms_send",
    },
    "sms_stat": {
        "url_name": "app_sirene:sms_stat",
        "icon": "fa-bar-chart",
        "label": _("SMS Stats"),
        "permission": "p_sirene_sms_stat",
    },
    "sms_journal": {
        "url_name": "app_sirene:sms_journal",
        "icon": "fa-list",
        "label": _("SMS Journal"),
        "permission": "p_sirene_sms_journal",
    },
    "cmt": {
        "url_name": "app_cmt:list",
        "icon": "fa-stethoscope",
        "label": _("CMT"),
        "permission": "p_cmt_ui_access",
    },
    "ipam": {
        "url_name": "app_data:ipam_private",
        "icon": "fa-map-marker",
        "label": _("IPAM"),
        "permission": "p_ipam_access",
    },
    "all_schemas": {
        "url_name": "app_data:private",
        "icon": "fa-plus",
        "label": _("[...] All"),
        "permission": "p_data_access",
    },
    "import": {
        "url_name": "app_data:data_import",
        "icon": "fa-plus",
        "label": _("Import"),
        "permission": "p_data_import",
    },
    "export": {
        "url_name": "app_data:data_exporter",
        "icon": "fa-minus",
        "label": _("Exporter"),
        "permission": "p_data_export",
    },
    "download": {
        "url_name": "app_data:data_download",
        "icon": "fa-download",
        "label": _("Download"),
        "permission": "p_data_export_viewer",
    },
    "code_editor": {
        "url_name": "app_data:code_editor",
        "icon": "fa-code",
        "label": _("Code Editor"),
        "permission": "p_code_editor",
    },
    "enumerate": {
        "url_name": "app_data:instance_list",
        "url_kwargs": {"classname": "_enumerate"},
        "icon": "fa-list",
        "label": _("Enumerate"),
        "permission": "p_enumerate_read",
    },
    "pipeline": {
        "url_name": "app_data:instance_list",
        "url_kwargs": {"classname": "_pipeline"},
        "icon": "fa-gears",
        "label": _("Pipeline"),
        "permission": "p_pipeline_read",
    },
    "dataview": {
        "url_name": "app_data:instance_list",
        "url_kwargs": {"classname": "_dataview"},
        "icon": "fa-table",
        "label": _("Dataview"),
        "permission": "p_dataview_read",
    },
    "configuration": {
        "url_name": "app_home:configuration",
        "icon": "fa-wrench",
        "label": _("Configuration"),
        "permission": "p_conf_view",
    },
    "revision": {
        "url_name": "app_home:admintools_revision",
        "icon": "fa-history",
        "label": _("Revision Log"),
        "permission": "p_admintools",
    },
    "admintools": {
        "url_name": "app_home:admintools",
        "icon": "fa-cog",
        "label": _("Admin Tools"),
        "permission": "p_admintools",
    },
    "role": {
        "url_name": "app_data:instance_list",
        "url_kwargs": {"classname": "role"},
        "icon": "fa-user-secret",
        "label": _("Roles"),
        "permission": "p_role_read",
    },
    "permission": {
        "url_name": "app_data:permission_list",
        "icon": "fa-lock",
        "label": _("Permissions"),
        "permission": "p_permission_read",
    },
    "apikey": {
        "url_name": "app_data:instance_list",
        "url_kwargs": {"classname": "_apikey"},
        "icon": "fa-key",
        "label": _("ApiKey"),
        "permission": "p_apikey_read",
    },
    "log": {
        "url_name": "app_home:log",
        "icon": "fa-book",
        "label": _("Logs"),
        "permission": "p_log_view",
    },
    "cavaliba_doc": {
        "url": "https://cavaliba.com/docs/",
        "icon": "fa-book",
        "label": _("Doc Cavaliba (Ext)"),
        "permission": None,
    },
}


# --------------------------------------------
# Cavaliba Apps
# --------------------------------------------

ICON_MAP_MD2FA = {
    "home": "fa-home",
    "public": "fa-sun-o",
    "location_on": "fa-map-marker",
    "checklist": "fa-tasks",
    "person": "fa-user-plus",
    "group": "fa-users",
    "apps": "fa-firefox",
    "web_asset": "fa-firefox",
    "night_shelter": "fa-hospital-o",
    "account_balance": "fa-university",
    "computer": "fa-laptop",
    "dns": "fa-server",
    "lan": "fa-wifi",
    "database": "fa-database",
    "build": "fa-wrench",
    "admin_panel_settings": "fa-user-secret",
    "lock": "fa-user-secret",
    "key": "fa-key",
    "book": "fa-list",
    "bar_chart": "fa-list",
    "list": "fa-list",
    "add": "fa-plus",
    "remove": "fa-minus",
    "settings": "fa-gears",
    "table_chart": "fa-table",
}
ICON_MAP_FA2MD = {
    "fa-home": "home",
    "fa-sun-o": "public",
    "fa-map-marker": "location_on",
    "fa-tasks": "checklist",
    "fa-user-plus": "person",
    "fa-users": "group",
    "fa-firefox": "web_asset",
    "fa-hospital-o": "night_shelter",
    "fa-university": "account_balance",
    "fa-laptop": "computer",
    "fa-server": "dns",
    "fa-wifi": "lan",
    "fa-database": "database",
    "fa-wrench": "build",
    "fa-user-secret": "admin_panel_settings",
    "fa-key": "key",
    "fa-list": "list",
    "fa-plus": "add",
    "fa-minus": "remove",
    "fa-gears": "settings",
    "fa-cog": "settings",
    "fa-table": "table_chart",
    "fa-book": "book",
}


def convert_icon(icon_name):
    """Convert icon name depending on HTML Framework"""

    fwk = settings.CAVALIBA_HTML_FRAMEWORK

    if fwk == "":  # bootstrap / fontawsome
        if icon_name.startswith("fa-"):
            return icon_name
        # map MD to FA
        try:
            return ICON_MAP_MD2FA[icon_name]
        except Exception:
            return "fa-minus"

    else:  # tw4 / material design
        if icon_name.startswith("fa-"):
            # map FA > MD
            try:
                return ICON_MAP_FA2MD[icon_name]
            except Exception:
                return "question_mark"

    return icon_name
