// // Facade.swift // MVMCoreUI // // Created by Kevin Christiano on 4/30/20. // Copyright © 2020 Verizon Wireless. All rights reserved. // import Foundation public typealias FacadeElements = (fill: UIColor?, text: UIColor?, border: UIColor?) public class Facade: Codable { //-------------------------------------------------- // MARK: - Properties //-------------------------------------------------- public var isInverted: Bool = false public lazy var enabled: FacadeElements = (fill: enabled_fillColor(), text: enabled_textColor(), border: enabled_borderColor()) public lazy var disabled: FacadeElements = (fill: disabled_fillColor(), text: disabled_textColor(), border: disabled_borderColor()) public var backgroundColor_standard: Color? public var backgroundColor_inverted: Color? public var enabledFillColor: Color? public var enabledTextColor: Color? public var enabledBorderColor: Color? public var enabledFillColor_inverted: Color? public var enabledTextColor_inverted: Color? public var enabledBorderColor_inverted: Color? public var disabledFillColor: Color? public var disabledTextColor: Color? public var disabledBorderColor: Color? public var disabledFillColor_inverted: Color? public var disabledTextColor_inverted: Color? public var disabledBorderColor_inverted: Color? public var borderWidth: CGFloat? public var borderWidth_inverted: CGFloat? //-------------------------------------------------- // MARK: - Initializer //-------------------------------------------------- public init(isInverted: Bool = false, backgroundColor_standard: Color? = nil, backgroundColor_inverted: Color? = nil, enabledFillColor: Color? = nil, enabledTextColor: Color? = nil, enabledBorderColor: Color? = nil, disabledFillColor: Color? = nil, disabledTextColor: Color? = nil, disabledBorderColor: Color? = nil, enabledFillColor_inverted: Color? = nil, enabledTextColor_inverted: Color? = nil, enabledBorderColor_inverted: Color? = nil, disabledFillColor_inverted: Color? = nil, disabledTextColor_inverted: Color? = nil, disabledBorderColor_inverted: Color? = nil, borderWidth: CGFloat? = nil, borderWidth_inverted: CGFloat? = nil) { self.isInverted = isInverted self.backgroundColor_standard = backgroundColor_standard self.backgroundColor_inverted = backgroundColor_inverted self.enabledFillColor = enabledFillColor self.enabledTextColor = enabledTextColor self.enabledBorderColor = enabledBorderColor self.disabledFillColor = disabledFillColor self.disabledTextColor = disabledTextColor self.disabledBorderColor = disabledBorderColor self.enabledFillColor_inverted = enabledFillColor_inverted self.enabledTextColor_inverted = enabledTextColor_inverted self.enabledBorderColor_inverted = enabledBorderColor_inverted self.disabledFillColor_inverted = disabledFillColor_inverted self.disabledTextColor_inverted = disabledTextColor_inverted self.disabledBorderColor_inverted = disabledBorderColor_inverted self.borderWidth = borderWidth self.borderWidth_inverted = borderWidth_inverted } //-------------------------------------------------- // MARK: - Methods //-------------------------------------------------- public func backgroundColor() -> UIColor? { return (isInverted ? backgroundColor_inverted : backgroundColor_standard)?.uiColor } public func getBorderWidth() -> CGFloat? { return isInverted ? borderWidth_inverted : borderWidth } public func enabled_fillColor() -> UIColor? { return (isInverted ? enabledFillColor_inverted : enabledFillColor)?.uiColor } public func enabled_textColor() -> UIColor? { return (isInverted ? enabledTextColor_inverted : enabledTextColor)?.uiColor } public func enabled_borderColor() -> UIColor? { return (isInverted ? enabledBorderColor_inverted : enabledBorderColor)?.uiColor } public func disabled_fillColor() -> UIColor? { return (isInverted ? disabledFillColor_inverted : disabledFillColor)?.uiColor } public func disabled_textColor() -> UIColor? { return (isInverted ? disabledTextColor_inverted : disabledTextColor)?.uiColor } public func disabled_borderColor() -> UIColor? { return (isInverted ? disabledBorderColor_inverted : disabledBorderColor)?.uiColor } //-------------------------------------------------- // MARK: - Keys //-------------------------------------------------- private enum CodingKeys: String, CodingKey { case backgroundColor_standard case backgroundColor_inverted case enabledFillColor case enabledTextColor case enabledBorderColor case enabledFillColor_inverted case enabledTextColor_inverted case enabledBorderColor_inverted case disabledFillColor case disabledTextColor case disabledBorderColor case disabledFillColor_inverted case disabledTextColor_inverted case disabledBorderColor_inverted } //-------------------------------------------------- // MARK: - Codec //-------------------------------------------------- required public init(from decoder: Decoder) throws { let typeContainer = try decoder.container(keyedBy: CodingKeys.self) backgroundColor_standard = try typeContainer.decodeIfPresent(Color.self, forKey: .backgroundColor_standard) backgroundColor_inverted = try typeContainer.decodeIfPresent(Color.self, forKey: .backgroundColor_inverted) enabledFillColor = try typeContainer.decodeIfPresent(Color.self, forKey: .enabledFillColor) enabledTextColor = try typeContainer.decodeIfPresent(Color.self, forKey: .enabledTextColor) enabledBorderColor = try typeContainer.decodeIfPresent(Color.self, forKey: .enabledBorderColor) enabledFillColor_inverted = try typeContainer.decodeIfPresent(Color.self, forKey: .enabledFillColor_inverted) enabledTextColor_inverted = try typeContainer.decodeIfPresent(Color.self, forKey: .enabledTextColor_inverted) enabledBorderColor_inverted = try typeContainer.decodeIfPresent(Color.self, forKey: .enabledBorderColor_inverted) disabledFillColor = try typeContainer.decodeIfPresent(Color.self, forKey: .disabledFillColor) disabledTextColor = try typeContainer.decodeIfPresent(Color.self, forKey: .disabledTextColor) disabledBorderColor = try typeContainer.decodeIfPresent(Color.self, forKey: .disabledBorderColor) disabledFillColor_inverted = try typeContainer.decodeIfPresent(Color.self, forKey: .disabledFillColor_inverted) disabledTextColor_inverted = try typeContainer.decodeIfPresent(Color.self, forKey: .disabledTextColor_inverted) disabledBorderColor_inverted = try typeContainer.decodeIfPresent(Color.self, forKey: .disabledBorderColor_inverted) } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(backgroundColor_standard, forKey: .backgroundColor_standard) try container.encodeIfPresent(backgroundColor_inverted, forKey: .backgroundColor_inverted) try container.encodeIfPresent(enabledFillColor, forKey: .enabledFillColor) try container.encodeIfPresent(enabledTextColor, forKey: .enabledTextColor) try container.encodeIfPresent(enabledBorderColor, forKey: .enabledBorderColor) try container.encodeIfPresent(enabledFillColor_inverted, forKey: .enabledFillColor_inverted) try container.encodeIfPresent(enabledTextColor_inverted, forKey: .enabledTextColor_inverted) try container.encodeIfPresent(enabledBorderColor_inverted, forKey: .enabledBorderColor_inverted) try container.encodeIfPresent(disabledFillColor, forKey: .disabledFillColor) try container.encodeIfPresent(disabledTextColor, forKey: .disabledTextColor) try container.encodeIfPresent(disabledBorderColor, forKey: .disabledBorderColor) try container.encodeIfPresent(disabledFillColor_inverted, forKey: .disabledFillColor_inverted) try container.encodeIfPresent(disabledTextColor_inverted, forKey: .disabledTextColor_inverted) try container.encodeIfPresent(disabledBorderColor_inverted, forKey: .disabledBorderColor_inverted) } }