package ru.forbion.f7cloud.mobile.ui

import ru.forbion.f7cloud.core.designsystem.F7AppMenuItem

// Иконки шторки — ПЛОСКИЕ menu-иконки живой темы forbion (images/menu/*.svg: зелёный+чёрный
// контур), а не glass-кружки. Локальные (assets/menu/menu-*.svg) — офлайн и 1:1 с сайтом.
private fun menuIcon(name: String): String = "file:///android_asset/menu/menu-$name.svg"

enum class AppTab(
    val title: String,
    val headerIconPath: String,
    val menuIconPath: String,
) {
    Mail("Почта", "mail-header-icon.svg", "mail-glass.svg"),
    Files("Файлы", "files-header-icon.svg", "files-glass.svg"),
    Calendar("Календарь", "calendar-header-icon.svg", "calendar-glass.svg"),
    Contacts("Контакты", "contacts-header-icon.svg", "contact-glass.svg"),
    Talk("Конференции", "spreed-header-icon.svg", "spreed-glass.svg"),
    Deck("Карточки", "deck-header-icon.svg", "deck-glass.svg"),
    Tasks("Задачи", "task-header-icon.svg", "task-glass.svg"),
    Support("Поддержка", "icon-header-f7support.svg", "icon-header-f7support.svg"),
    ;

    fun menuIconUrl(serverUrl: String): String {
        return "${serverUrl.trimEnd('/')}/themes/forbion/images/header/$menuIconPath"
    }
}

private data class AppMenuEntry(
    val tab: AppTab?,
    val label: String,
    val iconPath: String,
    val webPath: String? = null,
)

// Состав меню — по дизайну выдвижного меню (Почта/Конференции/Задачи/Поддержка — только
// в нижней панели; Уведомления/Настройки добавлены как нативные пункты, см. appMenuItems).
// iconPath — базовое имя плоской menu-иконки (assets/menu/menu-<name>.svg).
// Состав/порядок 1:1 со шторкой сайта: Файлы·Календарь·Контакты·Карточки·Заметки·Поддержка
// (Почта/Задачи/Конференции не тут — они в нижней панели).
private val coreAppMenuEntries = listOf(
    AppMenuEntry(AppTab.Files, "Файлы", "files"),
    AppMenuEntry(AppTab.Calendar, "Календарь", "calendar"),
    AppMenuEntry(AppTab.Contacts, "Контакты", "contacts"),
    AppMenuEntry(AppTab.Deck, "Карточки", "cards"),
    AppMenuEntry(null, "Заметки", "notes", webPath = "/apps/notes/"),
    AppMenuEntry(AppTab.Support, "Поддержка", "support"),
)

data class AppMenuExternalSite(
    val name: String,
    val iconUrl: String,
    val openUrl: String,
)

val appMenuTabs: List<AppTab> = AppTab.entries

fun appMenuItems(
    serverUrl: String,
    active: AppTab,
    externalSites: List<AppMenuExternalSite> = emptyList(),
): List<F7AppMenuItem> {
    val base = serverUrl.trimEnd('/')
    val core = coreAppMenuEntries.map { entry ->
        F7AppMenuItem(
            label = entry.label,
            iconUrl = menuIcon(entry.iconPath),
            selected = entry.tab == active,
            externalUrl = entry.webPath?.let { "$base$it" },
        )
    }
    val external = externalSites.map { site ->
        F7AppMenuItem(
            label = site.name,
            iconUrl = site.iconUrl,
            selected = false,
            externalUrl = site.openUrl,
        )
    }
    // Нативные пункты — плоские menu-иконки темы, действия по label в AppScaffold.
    // Порядок как на сайте: после внешних сайтов — Личный кабинет, затем Уведомления, Настройки.
    val native = listOf(
        F7AppMenuItem(
            label = "Личный кабинет",
            iconUrl = menuIcon("lk"),
            selected = false,
        ),
        F7AppMenuItem(
            label = "Уведомления",
            iconUrl = menuIcon("notifications"),
            selected = false,
        ),
        F7AppMenuItem(
            label = "Настройки",
            iconUrl = menuIcon("settings"),
            selected = false,
        ),
    )
    return core + external + native
}

fun appTabFromMenuIndex(index: Int): AppTab? {
    return coreAppMenuEntries.getOrNull(index)?.tab
}
