import Foundation

public struct ModelBadgeStyle: Equatable, Codable, Hashable {
    public struct ColorStyle: Equatable, Codable, Hashable {
        public let textColor: String
        public let backgroundColor: String
        public let borderColor: String

        public init(textColor: String, backgroundColor: String, borderColor: String) {
            self.textColor = textColor
            self.backgroundColor = backgroundColor
            self.borderColor = borderColor
        }
    }

    public let displayName: String
    public let light: ColorStyle
    public let dark: ColorStyle

    public init(displayName: String, light: ColorStyle, dark: ColorStyle) {
        self.displayName = displayName
        self.light = light
        self.dark = dark
    }
}

// MARK: - Convenience Initializer for API Response

public extension ModelBadgeStyle {
    /// Initialize from the API songrow badge response
    init?(songrowBadge: GenAPI.BadgeSchema?) {
        guard let badge = songrowBadge else { return nil }

        self.init(
            displayName: badge.displayName,
            light: ColorStyle(
                textColor: badge.light.textColor,
                backgroundColor: badge.light.backgroundColor ?? "",
                borderColor: badge.light.borderColor ?? ""
            ),
            dark: ColorStyle(
                textColor: badge.dark.textColor,
                backgroundColor: badge.dark.backgroundColor ?? "",
                borderColor: badge.dark.borderColor ?? ""
            )
        )
    }
}
