import Foundation

/// Desktop parity: version constants and release notes.
/// Desktop equivalent: `app/version.ts` — `APP_VERSION`, `RELEASE_NOTICE`.
enum ReleaseNotes {

    /// Current release notes entries, newest first.
    /// Each entry contains a version string and either a `body` (free-form markdown)
    /// or a `changes` list (auto-formatted as bullets).
    static let entries: [Entry] = [
        Entry(
            version: appVersion,
            body: """
            **Звонки — CallKit и PushKit**
            Интеграция с CallKit: входящие звонки отображаются на экране блокировки и Dynamic Island. PushKit для мгновенной доставки вызовов. Аватарки в списке звонков. Live Activity на экране блокировки.

            **Пересылка сообщений — Telegram-parity**
            Полностью переработан UI пересылки: правильный размер бабла, аватарка отправителя с инициалами, корректные отступы текста и таймстампа. Пересылка без перезаливки файлов на CDN.

            **Чат — анимации и навигация**
            Мгновенное появление отправленных сообщений (Telegram-parity spring). Разделители дат со sticky-поведением. Reply-to-reply с подсветкой и навигацией. Свайп-реплай с Telegram-эффектами. Корректное отображение эмодзи с Android/Desktop.

            **Пуш-уведомления**
            Data-only пуши: мгновенная обработка прочтений, мут-проверка групп, имя отправителя из контактов.

            **Кроссплатформенный паритет**
            10 фиксов совместимости: reply-бар, файлы, аватар, blurhash, per-attachment транспорт. Ограничения реплая/форварда синхронизированы с Desktop.

            **Стабильность**
            Фикс клавиатуры при свайп-бэк. Race condition свайп-минимизации call bar. Скролл реплай-сообщений под композер. Пустой чат: glass-подложка на iOS < 26.
            """
        )
    ]

    /// Current app version from bundle (matches desktop `APP_VERSION`).
    static var appVersion: String {
        Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "1.0.0"
    }

    /// Current build number from bundle.
    static var buildNumber: String {
        Bundle.main.infoDictionary?["CFBundleVersion"] as? String ?? "1"
    }

    /// Formatted release notice text for the current version (desktop parity: `RELEASE_NOTICE`).
    /// Sent as a system message from the "Rosetta Updates" account.
    static var releaseNoticeText: String {
        guard let latest = entries.first else { return "" }

        if let body = latest.body {
            return "**Update v\(latest.version)**\n\n\(body)"
        }

        // Fallback: auto-format from changes array.
        var lines = ["**Update v\(latest.version)**"]
        for change in latest.changes {
            lines.append("- \(change)")
        }
        return lines.joined(separator: "\n")
    }

    // MARK: - Entry

    struct Entry: Identifiable {
        let version: String
        var changes: [String] = []
        var body: String? = nil

        var id: String { version }
    }
}
