import XCTest
@testable import LocalSkyRadar

final class LocalSkyRadarTests: XCTestCase {
    func testStaticWidgetEntriesUseCappedAdaptiveRange() {
        XCTAssertEqual(RadarEntry.sample.rangeMode, .adaptive)
        XCTAssertLessThanOrEqual(RadarEntry.sample.rangeNM, 25)

        let resolved = (
            airport: Airport(icao: "HERE", name: "Test Center", lat: 37.0, lon: -122.0),
            mode: LocationMode.currentLocation
        )
        let fallback = RadarEntry.fallback(for: resolved)
        XCTAssertEqual(fallback.rangeMode, .adaptive)
        XCTAssertLessThanOrEqual(fallback.rangeNM, 25)
    }

    // Phase 0 gate: verify app group container is writable from both targets
    func testAppGroupContainerRoundTrip() throws {
        let sharedDefaults = UserDefaults(suiteName: "38Z85GV2D8.group.com.localsky.radar")
        XCTAssertNotNil(sharedDefaults, "App group UserDefaults should be accessible")

        let testKey = "phase0_test_key_\(UUID().uuidString)"
        let testValue = "phase0_value_\(Date().timeIntervalSince1970)"

        sharedDefaults?.set(testValue, forKey: testKey)
        sharedDefaults?.synchronize()

        let readBack = sharedDefaults?.string(forKey: testKey)
        XCTAssertEqual(readBack, testValue, "App group container should support read/write round-trip")

        // Clean up
        sharedDefaults?.removeObject(forKey: testKey)
    }

    func testAircraftDisplayCategoryUsesGeneralTypeCodeFamilies() {
        XCTAssertEqual(makeAircraft(type: "B739").displayCategory, .airliner)
        XCTAssertEqual(makeAircraft(type: "A320").displayCategory, .airliner)
        XCTAssertEqual(makeAircraft(type: "C172").displayCategory, .lightProp)
        XCTAssertEqual(makeAircraft(type: "BE35").displayCategory, .lightProp)
        XCTAssertEqual(makeAircraft(type: "GLF5").displayCategory, .businessJet)
        XCTAssertEqual(makeAircraft(type: "R44").displayCategory, .helicopter)
        XCTAssertEqual(makeAircraft(type: "").displayCategory, .unknown)
    }

    private func makeAircraft(type: String) -> Aircraft {
        Aircraft(
            id: UUID().uuidString,
            callsign: "TEST",
            type: type,
            registration: "N12345",
            lat: 37,
            lon: -122,
            altitudeFt: 1_000,
            groundSpeedKt: 120,
            trackDeg: 90,
            trend: .level,
            source: .adsb,
            distNM: 5,
            bearingDeg: 180
        )
    }
}
