//
//  DeepLinkTests.swift
//  Tests iOS
//
//  TC-125, TC-126: Deep link handling.
//

import XCTest

final class DeepLinkTests: BaseUITestCase {
    override var seedFixture: String? { "empty" }
    override var bypassSubscription: Bool { false }
    override var expireTrial: Bool { true }

    /// TC-126: Opening a malformed deep link does not crash the app.
    func testDeepLink_MalformedURL_NoCrash() {
        // Verify app launched and is on Day tab
        let tabBar = TabBarScreen(app: app)
        XCTAssertTrue(
            tabBar.dayTab.waitForExistence(timeout: 5),
            "App should launch to Day tab"
        )

        // Send a malformed deep link
        let malformedURL = URL(string: "reflect://invalidpath")!
        app.open(malformedURL)

        // App should still be running and responsive — verify Day tab still exists
        XCTAssertTrue(
            tabBar.dayTab.waitForExistence(timeout: 5),
            "App should remain functional after malformed deep link"
        )

        // Navigate to another tab to verify full responsiveness
        tabBar.tapYear()
        XCTAssertTrue(
            tabBar.yearTab.waitForExistence(timeout: 3),
            "App should be fully navigable after malformed deep link"
        )

        captureScreenshot(name: "deeplink_malformed_no_crash")
    }

    /// TC-125: reflect://subscribe opens subscription view.
    func testDeepLink_Subscribe_OpensPaywall() {
        // Verify app launched
        let tabBar = TabBarScreen(app: app)
        XCTAssertTrue(
            tabBar.dayTab.waitForExistence(timeout: 5),
            "App should launch to Day tab"
        )

        captureScreenshot(name: "deeplink_before_subscribe")

        // Send subscribe deep link
        let subscribeURL = URL(string: "reflect://subscribe")!
        app.open(subscribeURL)

        // Subscription view should appear as a sheet.
        // Detect the SubscriptionStoreView container (works even when products are unavailable in test).
        let storeContainer = app.descendants(matching: .any)
            .matching(identifier: "Subscription Store View Container")
            .firstMatch

        let found = storeContainer.waitForExistence(timeout: 8)

        captureScreenshot(name: "deeplink_subscribe_result")

        XCTAssertTrue(found,
            "Subscription view should appear after reflect://subscribe deep link"
        )
    }
}
