// Alpha end-to-end verification test.
//
// Runs the actual FRB-loaded Rust bridge against cn.teamspeak.app.
// This is the empirical evidence that the Alpha build's
// connect → snapshot → disconnect cycle works through the full
//   Dart UI thread → flutter_rust_bridge → chanora_bridge cdylib →
//   chanora_core → chanora_protocol → tsclientlib → network
// path.
//
// Tagged with the network-required marker so future CI can opt out.
// For now it's just a regular flutter_test test.

import 'package:flutter_test/flutter_test.dart';

import 'package:chanora_flutter/src/rust/api.dart' as rust;
import 'package:chanora_flutter/src/rust/frb_generated.dart';

void main() {
  setUpAll(() async {
    await RustLib.init();
  });

  test('connect/snapshot/disconnect against cn.teamspeak.app', () async {
    // Defensive: in case a previous test left a connection open.
    try {
      await rust.disconnect();
    } catch (_) {}

    final snap = await rust.connect(
      host: 'cn.teamspeak.app',
      nickname: 'ChanoraAlphaTest',
      password: '',
    );
    expect(snap.serverName, isNotEmpty);
    expect(snap.channels, isNotEmpty);
    // Welcome message is allowed to be empty on some servers; just
    // assert it's a String type (which it always is — this is more a
    // smoke than a real assertion).
    expect(snap.welcomeMessage, isA<String>());

    // Re-fetch the snapshot; should still succeed.
    final snap2 = await rust.snapshot();
    expect(snap2.serverName, snap.serverName);

    final connectedBefore = await rust.isConnected();
    expect(connectedBefore, isTrue);

    await rust.disconnect();

    final connectedAfter = await rust.isConnected();
    expect(connectedAfter, isFalse);
  }, timeout: const Timeout(Duration(seconds: 30)));
}
