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: """
            **Производительность скролла**
            Ячейки сообщений извлечены в отдельный Equatable-компонент — SwiftUI пропускает перерисовку неизменённых ячеек. Плавный скролл на 120 FPS даже в длинных переписках.

            **Пагинация**
            История чата подгружается порциями по 50 сообщений при скролле вверх. Можно листать на тысячи сообщений назад без задержек.

            **Клавиатура и поле ввода**
            Сообщения поднимаются синхронно с клавиатурой. Исправлено перекрытие сообщений при закрытии. Скругление поля ввода корректно возвращается к капсуле при переходе из многострочного режима.

            **Доставка и синхронизация**
            Сообщения больше не помечаются ошибкой при кратковременном обрыве — часики и автодоставка при реконнекте. Прочтения от оппонента корректно синхронизируются.
            """
        )
    ]

    /// 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 }
    }
}
