//
//  TestConstants.swift
//  SportsTimeTests
//
//  Constants used across test suites for consistent test configuration.
//

import Foundation

enum TestConstants {
    // MARK: - Distance & Radius

    /// Standard radius for "nearby" game filtering (miles)
    static let nearbyRadiusMiles: Double = 50.0

    /// Meters per mile conversion
    static let metersPerMile: Double = 1609.344

    /// Nearby radius in meters
    static var nearbyRadiusMeters: Double { nearbyRadiusMiles * metersPerMile }

    // MARK: - Timeouts

    /// Maximum time for performance/scale tests (5 minutes)
    static let performanceTimeout: TimeInterval = 300.0

    /// Maximum time before a test is considered hung (30 seconds)
    static let hangTimeout: TimeInterval = 30.0

    /// Standard async test timeout
    static let standardTimeout: TimeInterval = 10.0

    // MARK: - Performance Baselines
    // These will be recorded after initial runs and updated

    /// Baseline time for 500 games (to be determined)
    static var baseline500Games: TimeInterval = 0

    /// Baseline time for 2000 games (to be determined)
    static var baseline2000Games: TimeInterval = 0

    /// Baseline time for 10000 games (to be determined)
    static var baseline10000Games: TimeInterval = 0

    // MARK: - Driving Constraints

    /// Default max driving hours per day (single driver)
    static let defaultMaxDrivingHoursPerDay: Double = 8.0

    /// Average driving speed (mph) for estimates
    static let averageDrivingSpeedMPH: Double = 60.0

    /// Max days lookahead for game transitions
    static let maxDayLookahead: Int = 5

    // MARK: - Brute Force Verification

    /// Maximum number of stops for brute force verification
    static let bruteForceMaxStops: Int = 8

    // MARK: - Test Data Sizes

    enum DataSize: Int {
        case tiny = 5
        case small = 50
        case medium = 500
        case large = 2000
        case stress = 10000
        case extreme = 50000
    }

    // MARK: - Geographic Constants

    /// Earth radius in miles (for haversine)
    static let earthRadiusMiles: Double = 3958.8

    /// Earth circumference in miles
    static let earthCircumferenceMiles: Double = 24901.0

    // MARK: - Known Distances (for validation)

    /// NYC to LA approximate distance in miles
    static let nycToLAMiles: Double = 2451.0

    /// Distance tolerance percentage for validation
    static let distanceTolerancePercent: Double = 0.01 // 1%
}
