import UIKit

@objc(LKGradient)
public final class Gradient : NSObject {
    public let start: UIColor
    public let end: UIColor

    private override init() { preconditionFailure("Use init(start:end:) instead.") }

    @objc public init(start: UIColor, end: UIColor) {
        self.start = start
        self.end = end
        super.init()
    }
}

@objc public extension UIView {

    @objc func setGradient(_ gradient: Gradient) {
        let layer = CAGradientLayer()
        layer.frame = UIScreen.main.bounds
        layer.colors = [ gradient.start.cgColor, gradient.end.cgColor ]
        if let existingSublayer = self.layer.sublayers?[0], existingSublayer is CAGradientLayer {
            self.layer.replaceSublayer(existingSublayer, with: layer)
        } else {
            self.layer.insertSublayer(layer, at: 0)
        }
    }
}

@objc(LKGradients)
final public class Gradients : NSObject {

    @objc public static var defaultBackground: Gradient {
        switch AppModeManager.shared.currentAppMode {
        case .light: return Gradient(start: UIColor(hex: 0xFCFCFC), end: UIColor(hex: 0xFFFFFF))
        case .dark: return Gradient(start: UIColor(hex: 0x171717), end: UIColor(hex: 0x121212))
        }
    }

    @objc public static var homeVCFade: Gradient {
        switch AppModeManager.shared.currentAppMode {
        case .light: return Gradient(start: UIColor(hex: 0xFFFFFF).withAlphaComponent(0), end: UIColor(hex: 0xFFFFFF))
        case .dark: return Gradient(start: UIColor(hex: 0x000000).withAlphaComponent(0), end: UIColor(hex: 0x000000))
        }
    }
}