import XCTest
@testable import BackendEnvironmentClient

final class BackendEnvironmentClientTests: XCTestCase {
    func testConfigurationLoads() {
        // Configuration loading strategy:
        // - Production builds: Load from Production.plist
        // - Staff builds: Load from environment-specific plist files (Production.plist or Staging.plist)
        let configuration = BackendEnvironmentConfig.configuration(for: .production)

        // Verify that configuration loads successfully
        XCTAssertFalse(configuration.apiEndpointHost.isEmpty)
        XCTAssertFalse(configuration.webEndpointHost.isEmpty)
        XCTAssertFalse(configuration.statsigEnvironment.isEmpty)
        XCTAssertFalse(configuration.segmentProxyEndpoint.isEmpty)
        XCTAssertFalse(configuration.hcaptchaDomain.isEmpty)
    }

    func testStaffBuildCanLoadBothEnvironments() {
        let isStaff = BackendEnvironmentProvider.isStaffBuild()

        if isStaff {
            // Staff builds should be able to load both Production and Staging
            let prodConfig = BackendEnvironmentConfig.configuration(for: .production)
            XCTAssertEqual(prodConfig.apiEndpointHost, "studio-api.prod.suno.com")

            let stagingConfig = BackendEnvironmentConfig.configuration(for: .staging)
            XCTAssertEqual(stagingConfig.apiEndpointHost, "studio-api.staging.suno.com")
        } else {
            // Production builds only load from Production.plist
            let prodConfig = BackendEnvironmentConfig.configuration(for: .production)
            XCTAssertFalse(prodConfig.apiEndpointHost.isEmpty)
        }
    }

    func testDefaultEnvironmentIsProduction() {
        // Default should always be production
        let defaultEnv = BackendEnvironmentProvider.defaultEnvironment()
        XCTAssertEqual(defaultEnv, .production)
    }

    func testStaffBuildDetection() {
        // Staff build is detected by bundle identifier containing "staff"
        let isStaff = BackendEnvironmentProvider.isStaffBuild()
        let bundleId = Bundle.main.bundleIdentifier ?? ""

        if bundleId.contains("staff") {
            XCTAssertTrue(isStaff)
        } else {
            XCTAssertFalse(isStaff)
        }
    }
}
