import ContentsquareSDK

@objc(CSQInterfaceMetadata)
public class CSQInterfaceMetadata: NSObject {
    let CSQType: _CSQ.Type
    let csEventEmitterType: _CSEventEmitter.Type

    @objc
    public convenience override init() {
        self.init(CSQ.self, csEventEmitterType: CSEventEmitter.self)
    }
    
    init(_ CSQType: _CSQ.Type, csEventEmitterType: _CSEventEmitter.Type) {
        self.CSQType = CSQType
        self.csEventEmitterType = csEventEmitterType

        super.init()
    }
    
    @objc
    public func setOnMetadataChange() {
        CSQType.metadata.onChange { metadata in            
            let metadataDict = self.convertMetadataToDict(metadata)
            self.csEventEmitterType.shared?.sendMetadataChange(data: metadataDict)
        }
    }
    
    internal func convertMetadataToDict(_ metadata: ContentsquareSDK.CSQ.Metadata) -> [String: Any] {
        let metadataDict: [String: Any?] = [
            "userID": metadata.userID,
            "sessionID": metadata.sessionID,
            "identity": metadata.identity,
            "environmentID": metadata.environmentID,
            "projectID": metadata.projectID,
            "sessionReplayURL": metadata.sessionReplayURL?.absoluteString
        ]
        
        return metadataDict.mapValues { $0 ?? NSNull() }
    }
}

