// config/ComplyCubeConfigBuilder.kt package com.complycube.reactnative.config import com.complycube.reactnative.config.parser.StageParserFactory import com.complycube.reactnative.config.parser.DesignTokensParser import com.complycube.reactnative.config.parser.LookAndFeelParser import com.complycube.reactnative.config.helper.ColorSchemeParser import com.complycube.reactnative.config.parser.CountryExtractor class ComplyCubeConfigBuilder( private val validator: ConfigValidator, private val stageParserFactory: StageParserFactory, private val designTokensParser: DesignTokensParser, private val lookAndFeelParser: LookAndFeelParser, private val colorSchemeParser: ColorSchemeParser, private val countryExtractor: CountryExtractor ) { fun build(settings: Map): ValidationResult { // Validate input val validationResult = validator.validate(settings) if (validationResult is ValidationResult.Error) { return validationResult } try { countryExtractor.clear() val clientID = settings["clientID"] as String val clientToken = settings["clientToken"] as String val workflowTemplateId = settings["workflowTemplateId"] as? String val stages = if (workflowTemplateId.isNullOrBlank()) { val stagesData = settings["stages"].toAnyList() stageParserFactory.parseStages(stagesData) } else { emptyList() } val designTokens = settings["designTokens"]?.let { designTokensParser.parse(it.toStringAnyNullableMap()) } val lookAndFeel = settings["lookAndFeel"]?.let { lookAndFeelParser.parse(it.toStringAnyMap()) } val colorScheme = settings["colorScheme"]?.let { colorSchemeParser.parse(it.toStringStringMap()) } val countries = countryExtractor.getAllExtractedCountries() return ValidationResult.Success( ComplyCubeConfig( clientID = clientID, clientToken = clientToken, workflowTemplateId = workflowTemplateId, stages = stages, designTokens = designTokens, lookAndFeel = lookAndFeel, colorScheme = colorScheme, countries = countries ) ) } catch (e: Exception) { return ValidationResult.Error("Failed to build configuration: ${e.message}", message = e.message ?: "Unknown error") } } }