import XCTest

/// Simple test to verify basic app launch and login screen
/// This is the foundation test - if this works, we can build more complex tests
final class SimpleLoginTest: BaseUITestCase {
    override var includeResetStateLaunchArgument: Bool { false }


    override func setUpWithError() throws {
        try super.setUpWithError()

        // CRITICAL: Ensure we're logged out before each test
        ensureLoggedOut()
    }

    override func tearDownWithError() throws {
        try super.tearDownWithError()
    }

    // MARK: - Helper Methods

    /// Ensures the user is logged out and on the login screen
    private func ensureLoggedOut() {
        UITestHelpers.ensureLoggedOut(app: app)
    }

    // MARK: - Tests

    /// Test 1: App launches and shows login screen (or logs out if needed)
    func testAppLaunchesAndShowsLoginScreen() {
        let usernameField = app.textFields[AccessibilityIdentifiers.Authentication.usernameField]
        XCTAssertTrue(usernameField.exists, "Username field should be visible on login screen after logout")
    }

    /// Test 2: Can type in username and password fields
    func testCanTypeInLoginFields() {
        let usernameField = app.textFields[AccessibilityIdentifiers.Authentication.usernameField]
        usernameField.waitForExistenceOrFail(timeout: defaultTimeout, message: "Username field should exist on login screen")
        usernameField.focusAndType("testuser", app: app)

        let passwordField = app.secureTextFields[AccessibilityIdentifiers.Authentication.passwordField].exists
            ? app.secureTextFields[AccessibilityIdentifiers.Authentication.passwordField]
            : app.textFields[AccessibilityIdentifiers.Authentication.passwordField]
        XCTAssertTrue(passwordField.exists, "Password field should exist on login screen")
        passwordField.focusAndType("testpass123", app: app)

        let signInButton = app.buttons[AccessibilityIdentifiers.Authentication.loginButton]
        XCTAssertTrue(signInButton.exists, "Login button should exist on login screen")
    }
}
