import 'package:flutter_test/flutter_test.dart';
import 'package:get_it/get_it.dart';
import 'company_automated_test.dart';
import 'framework/core/api_error_diagnostics.dart';
import 'framework/core/auto_fixer.dart';
import 'framework/core/test_data_generator.dart';
import 'framework/infrastructure/test_context.dart';
import 'framework/infrastructure/report_collector.dart';
import '../real_api/test_helper.dart';

void main() {
  group('Company Automated Test', () {
    late GetIt getIt;
    late CompanyAutomatedTest companyTest;

    setUpAll(() async {
      await RealApiTestHelper.setupTestEnvironment();
      await RealApiTestHelper.loginAndGetToken();
      getIt = GetIt.instance;
    });

    tearDownAll(() async {
      await RealApiTestHelper.teardownTestEnvironment();
    });

    test('회사 관리 전체 자동화 테스트', () async {
      final testContext = TestContext();
      final errorDiagnostics = ApiErrorDiagnostics();
      final autoFixer = ApiAutoFixer(diagnostics: errorDiagnostics);
      final dataGenerator = TestDataGenerator();
      final reportCollector = ReportCollector();

      companyTest = CompanyAutomatedTest(
        apiClient: getIt.get(),
        getIt: getIt,
        testContext: testContext,
        errorDiagnostics: errorDiagnostics,
        autoFixer: autoFixer,
        dataGenerator: dataGenerator,
        reportCollector: reportCollector,
      );

      await companyTest.initializeServices();
      
      final metadata = companyTest.getScreenMetadata();
      final features = await companyTest.detectFeatures(metadata);
      final customFeatures = await companyTest.detectCustomFeatures(metadata);
      features.addAll(customFeatures);
      
      final result = await companyTest.executeTests(features);
      
      // expect(result.failedTests, equals(0), 
      //   reason: '${result.failedTests}개의 테스트가 실패했습니다');
    }, timeout: Timeout(Duration(minutes: 10)));
  });
}