// Copyright © 2023 Mastodon gGmbH. All rights reserved.

import UIKit
import MastodonLocalization

struct SettingsSection: Hashable {
    let entries: [SettingsEntry]
}

enum SettingsEntry: Hashable {
    case general
    case notifications
    case serverDetails(domain: String)
    case aboutMastodon
    case logout(accountName: String)

    var title: String {
        switch self {
            case .general:
                return L10n.Scene.Settings.Overview.general
            case .notifications:
                return L10n.Scene.Settings.Overview.notifications
            case .serverDetails(_):
                return L10n.Scene.Settings.Overview.serverDetails
            case .aboutMastodon:
                return L10n.Scene.Settings.Overview.aboutMastodon
            case .logout(let accountName):
                return L10n.Scene.Settings.Overview.logout(accountName)
        }
    }

    var secondaryTitle: String? {
        switch self {
            case .serverDetails(domain: let domain):
                return domain
            case .general, .notifications, .aboutMastodon, .logout(_):
                return nil
        }
    }

    var accessoryType: UITableViewCell.AccessoryType {
        switch self {
            case .general, .notifications, .serverDetails(_), .aboutMastodon, .logout(_):
                return .disclosureIndicator
        }
    }

    var icon: UIImage? {
        switch self {
            case .general:
                return UIImage(systemName: "gear")
            case .notifications:
                return UIImage(systemName: "bell.badge")
            case .serverDetails(_):
                return UIImage(systemName: "server.rack")
            case .aboutMastodon:
                return UIImage(systemName: "info.circle.fill")
            case .logout(_):
                return nil
        }
    }

    var iconBackgroundColor: UIColor? {
        switch self {
            case .general:
                return .systemGray
            case .notifications:
                return .systemRed
            case .serverDetails(_):
                return .systemTeal
            case .aboutMastodon:
                return .systemPurple
            case .logout(_):
                return nil
        }

    }

    var textColor: UIColor {
        switch self {
            case .general, .notifications, .aboutMastodon, .serverDetails(_):
                return .label
            case .logout(_):
                return .red
        }

    }
}
