//
//  ProductInfoViewConfiguration.swift
//  react-native-firework-sdk
//
//  Created by Jeff Zheng on 2021/12/30.
//

import FireworkVideo
import Foundation

struct ProductInfoViewConfiguration: Codable {
    var ctaButton: CTAButtonConfiguration?
    var linkButton: LinkButtonConfiguration?
    var productCard: ProductCardConfiguration?
    var productCardV2: ProductCardV2Configuration?
    var hydration: ProductHydrationConfiguration?

    enum VariantsHydrationStrategy: String, Codable {
        case merge
        case replace

        var strategy: FireworkVideo.VariantsHydrationStrategy {
            switch self {
            case .merge: return .merge
            case .replace: return .replace
            }
        }
    }

    struct ProductHydrationConfiguration: Codable {
        var variantsHydrationStrategy: VariantsHydrationStrategy?
    }

    struct CTAButtonConfiguration: Codable {
        var text: CTAButtonText?
        var backgroundColor: String?
        var textColor: String?
        var fontSize: Double?
        var iOSFontInfo: FontInfo?
    }

    enum CTAButtonText: String, Codable {
        case addToCart, shopNow
    }

    struct LinkButtonConfiguration: Codable {
        var isHidden: Bool?
    }

    enum ProductCardTheme: String, Codable {
        case light
        case dark
    }

    enum ProductCardCTAButtonText: String, Codable {
        case shopNow
        case buyNow
    }

    enum ProductCardPriceLabelAxis: String, Codable {
        case horizontal
        case vertical
    }

    struct ProductCardLabelConfiguration: Codable {
        var textColor: String?
        var fontSize: Double?
        var numberOfLines: Int?
        var iOSFontInfo: FontInfo?
    }

    struct ProductCardPriceConfiguration: Codable {
        @available(*, deprecated, message: "This property has no effect.")
        var isHidden: Bool?
        var axis: ProductCardPriceLabelAxis?
        var priceLabel: ProductCardLabelConfiguration?
        var originalPriceLabel: ProductCardLabelConfiguration?
        var isPriceFirst: Bool?
    }

    struct ProductCardIconConfiguration: Codable {
        var cornerRadius: CGFloat?
    }

    struct ProductCardCTAButtonStyle: Codable {
        var textColor: String?
        var fontSize: Double?
        var iOSFontInfo: FontInfo?
    }

    struct ProductCardConfiguration: Codable {
        var theme: ProductCardTheme?
        var cornerRadius: CGFloat?
        var ctaButtonText: ProductCardCTAButtonText?
        var isCtaButtonHidden: Bool?
        var ctaButtonStyle: ProductCardCTAButtonStyle?
        var priceConfiguration: ProductCardPriceConfiguration?
        var width: CGFloat?
        var height: CGFloat?
        var backgroundColor: String?
        var iconConfiguration: ProductCardIconConfiguration?
        var nameLabel: ProductCardLabelConfiguration?
    }

    struct ProductCardV2LabelConfiguration: Codable {
        var textColor: String?
    }

    struct ProductCardV2BorderConfiguration: Codable {
        var color: String?
    }

    struct ProductCardV2PriceConfiguration: Codable {
        var priceLabel: ProductCardV2LabelConfiguration?
        var discountLabel: ProductCardV2LabelConfiguration?
        var originalPriceLabel: ProductCardV2LabelConfiguration?
    }

    struct ProductCardV2Configuration: Codable {
        var cornerRadius: CGFloat?
        var backgroundColor: String?
        var borderConfiguration: ProductCardV2BorderConfiguration?
        var nameLabel: ProductCardV2LabelConfiguration?
        var priceConfiguration: ProductCardV2PriceConfiguration?
    }
}
