import Defaults
import Foundation
import SwiftUI

enum Constants {
    static let overlayAnimation = Animation.linear(duration: 0.2)
    static let aspectRatio16x9 = 16.0 / 9.0
    static let aspectRatio4x3 = 4.0 / 3.0

    static var isAppleTV: Bool {
        #if os(iOS)
            UIDevice.current.userInterfaceIdiom == .tv
        #else
            false
        #endif
    }

    static var isMac: Bool {
        #if os(iOS)
            UIDevice.current.userInterfaceIdiom == .mac
        #else
            false
        #endif
    }

    static var isIPhone: Bool {
        #if os(iOS)
            UIDevice.current.userInterfaceIdiom == .phone
        #else
            false
        #endif
    }

    static var isIPad: Bool {
        #if os(iOS)
            UIDevice.current.userInterfaceIdiom == .pad
        #else
            false
        #endif
    }

    static var isTvOS: Bool {
        #if os(tvOS)
            true
        #else
            false
        #endif
    }

    static var isMacOS: Bool {
        #if os(macOS)
            true
        #else
            false
        #endif
    }

    static var isIOS: Bool {
        #if os(iOS)
            true
        #else
            false
        #endif
    }

    static var detailsVisibility: Bool {
        #if os(iOS)
            false
        #else
            true
        #endif
    }

    static var progressViewScale: Double {
        #if os(macOS)
            0.4
        #else
            0.6
        #endif
    }

    static var channelThumbnailSize: Double {
        #if os(tvOS)
            50
        #else
            30
        #endif
    }

    static var sidebarChannelThumbnailSize: Double {
        #if os(macOS)
            20
        #else
            30
        #endif
    }

    static var channelDetailsStackSpacing: Double {
        #if os(tvOS)
            12
        #else
            6
        #endif
    }

    static var contentViewMinWidth: Double {
        #if os(macOS)
            835
        #else
            0
        #endif
    }

    static var deviceName: String {
        #if os(macOS)
            Host().localizedName ?? "Mac"
        #else
            UIDevice.current.name
        #endif
    }

    static var platform: String {
        #if os(macOS)
            "macOS"
        #elseif os(iOS)
            "iOS"
        #elseif os(tvOS)
            "tvOS"
        #else
            "unknown"
        #endif
    }

    static var defaultNavigationStyle: NavigationStyle {
        #if os(macOS)
            return .sidebar
        #elseif os(iOS)
            if isIPad {
                return .sidebar
            }
            return .tab
        #else
            return .tab
        #endif
    }

    static func seekIcon(_ type: String, _ interval: TimeInterval) -> String {
        let interval = Int(interval)
        let allVersions = [10, 15, 30, 45, 60, 75, 90]
        let iOS15 = [5]
        let iconName = "go\(type).\(interval)"

        if #available(iOS 15, macOS 12, *) {
            if iOS15.contains(interval) {
                return iconName
            }
        }

        if allVersions.contains(interval) {
            return iconName
        }

        let sign = type == "forward" ? "plus" : "minus"

        return "go\(type).\(sign)"
    }
}