import Foundation
import UIKit
import ComplyCubeMobileSDK

/// iOS equivalent of Android ColorSchemeParser. Mirrors keys & aliases.
/// Android reference mapping shows the same fields and fallbacks. :contentReference[oaicite:0]{index=0}
public final class ColorSchemeParser: ColorSchemeParsing {
    private let colorConverter: ColorConverter

    public init(colorConverter: ColorConverter = ColorConverter()) {
        self.colorConverter = colorConverter
    }

    public func parseSDK(from raw: [String: Any]) throws -> ComplyCubeColourScheme {
        func color(_ keys: String...) -> UIColor? {
            for k in keys {
                if let hex = raw[k] as? String, let c = colorConverter.hexToColor(hex) { return c }
            }
            return nil
        }

        var scheme = ComplyCubeColourScheme()

        // Buttons
//        scheme.primaryButtonColor       = color("primaryButtonBgColor") // Android uses *Color for bg
        scheme.primaryButtonTextColor   = color("primaryButtonTextColor")
        scheme.primaryButtonBorderColor = color("primaryButtonBorderColor")
        scheme.primaryButtonBgColor     = color("primaryButtonBgColor")
        scheme.primaryButtonPressedBgColor = color("primaryButtonPressedBgColor") // iOS extra

//        scheme.secondaryButtonColor       = color("secondaryButtonBgColor")
        scheme.secondaryButtonTextColor   = color("secondaryButtonTextColor")
        scheme.secondaryButtonBorderColor = color("secondaryButtonBorderColor")
        scheme.secondaryButtonBgColor     = color("secondaryButtonBgColor")
        scheme.secondaryButtonPressedBgColor = color("secondaryButtonPressedBgColor") // iOS extra

        scheme.linkButtonTextColor = color("linkButtonTextColor")

        // Document selector (legacy aliases supported)
//        scheme.documentSelectorColor              = color("docTypeBgColor", "documentSelectorColor")
//        scheme.documentSelectorBorderColor        = color("docTypeBorderColor", "documentSelectorBorderColor")
//        scheme.documentSelectorIconColor          = color("documentSelectorIconColor")
//        scheme.documentSelectorTitleTextColor     = color("documentSelectorTitleTextColor")
//        scheme.documentSelectorDescriptionTextColor = color("documentSelectorDescriptionTextColor")

        // Info popup (aliases)
//        scheme.infoPopupColor                 = color("popUpBgColor", "infoPopupColor")
//        scheme.infoPopupIconColor             = color("infoPopupIconColor")
//        scheme.infoPopupTitleTextColor        = color("popUpTitleColor", "infoPopupTitleTextColor")
//        scheme.infoPopupDescriptionTextColor  = color("infoPopupDescriptionTextColor")

        // Error popup
//        scheme.errorPopupColor                = color("errorPopupColor")
//        scheme.errorPopupIconColor            = color("errorPopupIconColor")
//        scheme.errorPopupTitleTextColor       = color("errorPopupTitleTextColor")
//        scheme.errorPopupDescriptionTextColor = color("errorPopupDescriptionTextColor")

        // Camera
//        scheme.cameraButtonColor = color("cameraButtonColor")

        // Text (aliases)
//        scheme.bodyTextColor        = color("textSecondary", "bodyTextColor")
//        scheme.headingTextColor     = color("headerTitle", "headingTextColor")
//        scheme.subheadingTextColor  = color("subheaderTitle", "subheadingTextColor")
        scheme.textItemType         = color("textItemType")
        scheme.blueBigType          = color("blueBigType")

        // Backgrounds / inputs
//        scheme.backgroundColor                = color("backgroundColor")
//        scheme.backgroundContentColor         = color("backgroundContentColor")
//        scheme.backgroundContentContrastColor = color("backgroundContentContrastColor")
//        scheme.backgroundDividerColor         = color("backgroundDividerColor")
//        scheme.editTextColor                  = color("editTextColor")

        // Legacy iOS-only docType fields (kept for symmetry with your old VC)
        scheme.docTypeBgColor     = color("docTypeBgColor")
        scheme.docTypeTextColor   = color("docTypeTextColor")
        scheme.docTypeBorderColor = color("docTypeBorderColor")

        // Legacy popUp aliases already mapped above

        return scheme
    }
}
