import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:lanebow/utils/test_utils.dart';
import 'package:lanebow/utils/url_utils.dart';

void main() {
  setUp(() {
    // 테스트 모드 강제
    TestUtils.setTestMode(true);
  });

  group('UrlUtils', () {
    test('generatePublicHash - 테스트 모드에서 예측 가능한 해시 반환', () {
      final h1 = UrlUtils.generatePublicHash();
      final h2 = UrlUtils.generatePublicHash();
      expect(h1, isNotEmpty);
      expect(h2, isNotEmpty);
      expect(h1, isNot(h2)); // 카운터 증가로 서로 달라야 함
      expect(h1.startsWith('test'), true);
      expect(h2.startsWith('test'), true);
    });

    test('getEventPublicUrl - 기본 도메인과 해시 결합', () {
      const hash = 'test42';
      final url = UrlUtils.getEventPublicUrl(hash);
      expect(url, '${UrlUtils.eventBaseUrl}$hash');
    });

    testWidgets('copyUrlToClipboard - 테스트 모드에서 오류 없이 동작하고 SnackBar 미표시', (tester) async {
      // 테스트 환경에서는 SnackBar를 실제로 띄우지 않고 로그만 출력하도록 구현되어 있음
      final app = MaterialApp(
        home: Scaffold(
          appBar: AppBar(),
          body: Builder(
            builder: (context) {
              return Center(
                child: ElevatedButton(
                  onPressed: () {
                    UrlUtils.copyUrlToClipboard(context, 'https://example.com');
                  },
                  child: const Text('copy'),
                ),
              );
            },
          ),
        ),
      );

      await tester.pumpWidget(app);
      await tester.tap(find.text('copy'));
      await tester.pump();

      // SnackBar가 표시되지 않아야 함 (테스트 모드)
      expect(find.byType(SnackBar), findsNothing);
    });
  });
}
