import Foundation
import ComplyCubeMobileSDK

public final class DocumentStageParser: StageParser {
    private let types: DocumentTypeParser
    public init(documentTypeParser: DocumentTypeParser) { self.types = documentTypeParser }

    public func canParse(_ input: Any) -> Bool {
        (input as? [String: Any]).map { $0["name"] as? String == "documentCapture" } ?? false
    }

    public func parse(_ input: Any) throws -> ComplyCubeMobileSDKStage? {
        let s = input as! [String: Any]
        let tmap = s["documentTypes"] as? [String: Any] ?? [:]
        let allowed = types.parse(tmap)

        return DocumentStageBuilder()
            .setEnableNFC(enable: s["nfcEnabled"] as? Bool ?? false)
            .setEnableMLAssistant(enable: s["useMLAssistance"] as? Bool ?? true)
            .setShowGuidance(enable: s["showGuidance"] as? Bool ?? true)
            .setRetryLimit(count: s["retryLimit"] as? Int ?? 3)
            .useLiveCaptureOnly(enable: s["useLiveCaptureOnly"] as? Bool ?? false)
            .setAllowedDocumentTypes(types: allowed)
            .build()
    }
}
