import 'dart:io';
import 'package:flutter/foundation.dart';
import 'screens/equipment/equipment_in_full_test.dart';

/// 장비 테스트 독립 실행 스크립트
Future<void> main() async {
  debugPrint('\n==============================');
  debugPrint('장비 화면 자동 테스트 시작');
  debugPrint('==============================\n');
  
  final equipmentTest = EquipmentInFullTest();
  
  try {
    final results = await equipmentTest.runAllTests();
    
    debugPrint('\n==============================');
    debugPrint('테스트 결과 요약');
    debugPrint('==============================');
    debugPrint('전체 테스트: ${results['totalTests']}개');
    debugPrint('성공: ${results['passedTests']}개');
    debugPrint('실패: ${results['failedTests']}개');
    debugPrint('==============================\n');
    
    // 상세 결과 출력
    final tests = results['tests'] as List;
    for (final test in tests) {
      final status = test['passed'] ? '✅' : '❌';
      debugPrint('$status ${test['testName']}');
      if (!test['passed'] && test['error'] != null) {
        debugPrint('   에러: ${test['error']}');
        if (test['retryCount'] != null && test['retryCount'] > 0) {
          debugPrint('   재시도 횟수: ${test['retryCount']}회');
        }
      }
    }
    
    // 리포트 생성
    final reportCollector = equipmentTest.autoTestSystem.reportCollector;
    
    debugPrint('\n리포트 생성 중...');
    
    // 리포트 디렉토리 생성
    final reportDir = Directory('test_reports');
    if (!await reportDir.exists()) {
      await reportDir.create(recursive: true);
    }
    
    // HTML 리포트 생성
    try {
      final htmlReport = await reportCollector.generateHtmlReport();
      final htmlFile = File('test_reports/equipment_test_report.html');
      await htmlFile.writeAsString(htmlReport);
      debugPrint('✅ HTML 리포트 생성: ${htmlFile.path}');
    } catch (e) {
      debugPrint('❌ HTML 리포트 생성 실패: $e');
    }
    
    // Markdown 리포트 생성
    try {
      final mdReport = await reportCollector.generateMarkdownReport();
      final mdFile = File('test_reports/equipment_test_report.md');
      await mdFile.writeAsString(mdReport);
      debugPrint('✅ Markdown 리포트 생성: ${mdFile.path}');
    } catch (e) {
      debugPrint('❌ Markdown 리포트 생성 실패: $e');
    }
    
    // JSON 리포트 생성
    try {
      final jsonReport = await reportCollector.generateJsonReport();
      final jsonFile = File('test_reports/equipment_test_report.json');
      await jsonFile.writeAsString(jsonReport);
      debugPrint('✅ JSON 리포트 생성: ${jsonFile.path}');
    } catch (e) {
      debugPrint('❌ JSON 리포트 생성 실패: $e');
    }
    
    // 실패한 테스트가 있으면 비정상 종료
    if (results['failedTests'] > 0) {
      debugPrint('\n❌ ${results['failedTests']}개의 테스트가 실패했습니다.');
      exit(1);
    } else {
      debugPrint('\n✅ 모든 테스트가 성공했습니다!');
      exit(0);
    }
  } catch (e, stackTrace) {
    debugPrint('\n❌ 치명적 오류 발생:');
    debugPrint(e.toString());
    debugPrint('\n스택 추적:');
    debugPrint(stackTrace.toString());
    exit(2);
  }
}