//
//  Color+Hex.swift
//  lichunWebsocket
//
//  Extension for creating SwiftUI Colors from hex values
//

import SwiftUI

// MARK: - UIColor Hex Extension

extension UIColor {
    convenience init(hex: UInt, alpha: CGFloat = 1.0) {
        let red = CGFloat((hex >> 16) & 0xFF) / 255.0
        let green = CGFloat((hex >> 8) & 0xFF) / 255.0
        let blue = CGFloat(hex & 0xFF) / 255.0

        self.init(red: red, green: green, blue: blue, alpha: alpha)
    }
}

// MARK: - Color Hex Extension

extension Color {
    init(hex: UInt, alpha: Double = 1.0) {
        let red = Double((hex >> 16) & 0xFF) / 255.0
        let green = Double((hex >> 8) & 0xFF) / 255.0
        let blue = Double(hex & 0xFF) / 255.0

        self.init(red: red, green: green, blue: blue, opacity: alpha)
    }

    /// Convenience initializer for hex Int (compatibility)
    init(hex: Int, opacity: Double = 1.0) {
        self.init(hex: UInt(hex), alpha: opacity)
    }

    /// Lighten a color by a percentage (0.0 to 1.0)
    func lighter(by percentage: CGFloat = 0.2) -> Color {
        return self.adjust(by: abs(percentage))
    }

    /// Darken a color by a percentage (0.0 to 1.0)
    func darker(by percentage: CGFloat = 0.2) -> Color {
        return self.adjust(by: -abs(percentage))
    }

    /// Adjust color brightness
    private func adjust(by percentage: CGFloat) -> Color {
        var red: CGFloat = 0
        var green: CGFloat = 0
        var blue: CGFloat = 0
        var alpha: CGFloat = 0

        #if os(iOS)
        UIColor(self).getRed(&red, green: &green, blue: &blue, alpha: &alpha)
        #else
        NSColor(self).getRed(&red, green: &green, blue: &blue, alpha: &alpha)
        #endif

        return Color(
            .sRGB,
            red: min(max(red + percentage, 0), 1),
            green: min(max(green + percentage, 0), 1),
            blue: min(max(blue + percentage, 0), 1),
            opacity: alpha
        )
    }
}
