import Foundation
import ComplyCubeMobileSDK

public struct ComplyCubeConfigurationFactory {
    public init() {}

    public func makeDependencies() -> SettingsDependencies {
        // Helpers
        let colorConverter = ColorConverter()
        let countryExtractor = CountryExtractor()

        // Parsers (Look & Feel)
        let lookAndFeelParser = LookAndFeelParser(colorConverter: colorConverter)
        let colorSchemeParser = ColorSchemeParser(colorConverter: colorConverter)

        // Stage parsers
        let stringStageParser = StringStageParser()
        let documentTypeParser = DocumentTypeParser(countryExtractor: countryExtractor)
        let documentStageParser = DocumentStageParser(documentTypeParser: documentTypeParser)
        let faceStageParser = FaceStageParser()
        let addressStageParser = AddressStageParser()
        let poaStageParser = ProofOfAddressStageParser(countryExtractor: countryExtractor)
        let customerInfoStageParser = CustomerInfoParser()

        // Registry + router + pipeline
        let registry = StageParserRegistry(
            documentStageParser: documentStageParser,
            faceStageParser: faceStageParser,
            poaStageParser: poaStageParser,
            addressStageParser: addressStageParser,
            customerInfoParser: customerInfoStageParser
        )
        let router = StagesRouter(stringStageParser: stringStageParser, registry: registry)
        let pipeline = StagesPipeline(router: router)

        return SettingsDependencies(
            stageListParser: pipeline,
            lookAndFeelParser: lookAndFeelParser,
            colorSchemeParser: colorSchemeParser,
            countryExtractor: countryExtractor
        )
    }
}
