@TestOn('browser')
@JS()
library;

// TODO: https://github.com/dart-lang/webdev/issues/2508
// ignore: deprecated_member_use
import 'dart:js_util';

// TODO: https://github.com/dart-lang/webdev/issues/2508
// ignore: deprecated_member_use
import 'package:js/js.dart';
import 'package:test/test.dart';

import '../web/chrome_api.dart';
import '../web/utils.dart';

void main() {
  group('activeTab', () {
    setUp(() {
      // Create the chrome object and tabs property
      final chrome = newObject();
      final tabs = newObject();
      setProperty(chrome, 'tabs', tabs);
      setProperty(globalThis, 'chrome', chrome);
    });

    test('returns the active tab when found', () async {
      final chrome = getProperty(globalThis, 'chrome');
      final tabs = getProperty(chrome, 'tabs');

      // Mock chrome.tabs.query
      setProperty(
        tabs,
        'query',
        allowInterop((QueryInfo info, Function callback) {
          expect(info.active, isTrue);
          expect(info.currentWindow, isTrue);

          final tab = newObject();
          setProperty(tab, 'id', 123);
          setProperty(tab, 'url', 'http://google.com');

          callback([tab]);
        }),
      );

      final tab = await activeTab;
      expect(tab, isNotNull);
      expect(tab!.id, 123);
      expect(tab.url, 'http://google.com');
    });

    test('returns null when no active tab found', () async {
      final chrome = getProperty(globalThis, 'chrome');
      final tabs = getProperty(chrome, 'tabs');

      // Mock chrome.tabs.query to return empty list
      setProperty(
        tabs,
        'query',
        allowInterop((QueryInfo info, Function callback) {
          callback([]);
        }),
      );

      final tab = await activeTab;
      expect(tab, isNull);
    });
  });
}
