//
//  BlazeReactFirstTimeSlideStyleMerger.swift
//  Pods
//
//  Created by Reuven Levitsky on 18/05/2025.
//

import Foundation
import BlazeSDK

extension BlazeStoryPlayerFirstTimeSlideStyle {
    func mergedWith(_ customization: BlazeReactStoryPlayerFirstTimeSlideStyle?) -> Self {
        guard let customization else { return self }
        
        var merged = self
        merged.backgroundColor = UIColor(hexString: customization.backgroundColor?.colorName) ?? merged.backgroundColor
        merged.show = customization.show ?? merged.show
        merged.mainTitle = merged.mainTitle.mergedWith(customization.mainTitle)
        merged.cta = merged.cta.mergedWith(customization.cta)
        merged.subtitle = merged.subtitle.mergedWith(customization.subtitle)
        merged.instructions = merged.instructions.mergedWith(customization.instructions)
        return merged
    }
}

extension BlazeStoryPlayerFirstTimeSlideInstructionsStyle {
    func mergedWith(_ customization: BlazeReactStoryPlayerFirstTimeSlideInstructionsStyle?) -> Self {
        guard let customization else { return self }
        
        var merged = self
        merged.backward = merged.backward.mergedWith(customization.backward)
        merged.forward = merged.forward.mergedWith(customization.forward)
        merged.pause = merged.pause.mergedWith(customization.pause)
        merged.transition = merged.transition.mergedWith(customization.transition)
        return merged
    }
}

extension BlazeFirstTimeSlideInstructionStyle {
    func mergedWith(_ customization: BlazeReactFirstTimeSlideInstructionStyle?) -> Self {
        guard let customization else { return self }
        
        var merged = self
        merged.descriptionText = merged.descriptionText.mergedWith(customization.descriptionText)
        merged.headerText = merged.headerText.mergedWith(customization.headerText)
        return merged
    }
}

extension BlazeFirstTimeSlideCTAStyle {
    func mergedWith(_ customization: BlazeReactFirstTimeSlideCTAStyle?) -> Self {
        guard let customization else { return self }
        
        var merged = self
        merged.backgroundColor = UIColor(hexString: customization.backgroundColor?.colorName
        ) ?? merged.backgroundColor
        merged.cornerRadius = customization.cornerRadius ?? merged.cornerRadius
        merged.textColor = UIColor(hexString: customization.textColor?.colorName) ?? merged.textColor
        merged.font = merged.font.fontWith(customization.font, textSize: customization.textSize)
        merged.title = customization.title ?? merged.title
        return merged
    }
}

extension BlazeFirstTimeSlideTextStyle {
    func mergedWith(_ customization: BlazeReactFirstTimeSlideTextStyle?) -> Self {
        guard let customization else { return self }
        
        var merged = self
        
        merged.textColor = UIColor(hexString: customization.textColor?.colorName) ?? merged.textColor
        merged.font = merged.font.fontWith(customization.font, textSize: customization.textSize)
        merged.text = customization.text ?? merged.text
        
        return merged
    }
}
