// // 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: UIColor? = nil, backgroundColor_inverted: UIColor? = nil, enabledFillColor: UIColor? = nil, enabledTextColor: UIColor? = nil, enabledBorderColor: UIColor? = nil, disabledFillColor: UIColor? = nil, disabledTextColor: UIColor? = nil, disabledBorderColor: UIColor? = nil, enabledFillColor_inverted: UIColor? = nil, enabledTextColor_inverted: UIColor? = nil, enabledBorderColor_inverted: UIColor? = nil, disabledFillColor_inverted: UIColor? = nil, disabledTextColor_inverted: UIColor? = nil, disabledBorderColor_inverted: UIColor? = nil, borderWidth: CGFloat? = nil, borderWidth_inverted: CGFloat? = nil) { self.isInverted = isInverted self.backgroundColor_standard = Color(uiColor: backgroundColor_standard) self.backgroundColor_inverted = Color(uiColor: backgroundColor_inverted) self.enabledFillColor = Color(uiColor: enabledFillColor) self.enabledTextColor = Color(uiColor: enabledTextColor) self.enabledBorderColor = Color(uiColor: enabledBorderColor) self.disabledFillColor = Color(uiColor: disabledFillColor) self.disabledTextColor = Color(uiColor: disabledTextColor) self.disabledBorderColor = Color(uiColor: disabledBorderColor) self.enabledFillColor_inverted = Color(uiColor: enabledFillColor_inverted) self.enabledTextColor_inverted = Color(uiColor: enabledTextColor_inverted) self.enabledBorderColor_inverted = Color(uiColor: enabledBorderColor_inverted) self.disabledFillColor_inverted = Color(uiColor: disabledFillColor_inverted) self.disabledTextColor_inverted = Color(uiColor: disabledTextColor_inverted) self.disabledBorderColor_inverted = Color(uiColor: 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) } }