//
// Copyright 2024 New Vector Ltd.
//
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
// Please see LICENSE files in the repository root for full details.
//

import Foundation
import MatrixRustSDK

extension AuthenticationClientBuilderMock {
    struct Configuration {
        var homeserverClients = [
            "matrix.org": ClientSDKMock(configuration: .init()),
            "example.com": ClientSDKMock(configuration: .init(serverAddress: "example.com",
                                                              homeserverURL: "https://matrix.example.com",
                                                              slidingSyncVersion: .native,
                                                              supportsPasswordLogin: true,
                                                              elementWellKnown: "")),
            "company.com": ClientSDKMock(configuration: .init(serverAddress: "company.com",
                                                              homeserverURL: "https://matrix.company.com",
                                                              slidingSyncVersion: .native,
                                                              oidcLoginURL: "https://auth.company.com/oidc",
                                                              supportsPasswordLogin: false,
                                                              elementWellKnown: "")),
            "server.net": ClientSDKMock(configuration: .init(serverAddress: "server.net",
                                                             homeserverURL: "https://matrix.example.com",
                                                             slidingSyncVersion: .native,
                                                             supportsPasswordLogin: false,
                                                             elementWellKnown: ""))
        ]
        var qrCodeClient = ClientSDKMock(configuration: .init())
    }
    
    convenience init(configuration: Configuration) {
        self.init()
        
        buildHomeserverAddressClosure = { address in
            guard let client = configuration.homeserverClients[address] else {
                throw ClientBuildError.ServerUnreachable(message: "Not a known homeserver.")
            }
            return client
        }
        
        buildWithQRCodeQrCodeDataOidcConfigurationProgressListenerReturnValue = configuration.qrCodeClient
    }
}
