import 'package:flutter_test/flutter_test.dart';
import 'package:userfront/core/i18n/locale_registry.dart';
import 'package:userfront/core/services/null_check_recovery.dart';

void main() {
  setUp(() {
    LocaleRegistry.setSupportedLocaleCodesForTest(['en', 'ko']);
  });

  tearDown(() {
    LocaleRegistry.resetForTest();
  });

  test('Null check 오류 + 루트(/)면 선호 로케일 signin으로 복구', () {
    final target = computeNullCheckRecoveryTarget(
      exception: Exception('Null check operator used on a null value'),
      uri: Uri.parse('https://sss.hmac.kr/'),
      preferredLocaleCode: 'ko',
    );

    expect(target, '/ko/signin');
  });

  test('Null check 오류 + /ko면 /ko/signin으로 복구', () {
    final target = computeNullCheckRecoveryTarget(
      exception: Exception('Null check operator used on a null value'),
      uri: Uri.parse('https://sss.hmac.kr/ko'),
      preferredLocaleCode: 'en',
    );

    expect(target, '/ko/signin');
  });

  test('이미 /ko/signin이면 복구 이동하지 않음', () {
    final target = computeNullCheckRecoveryTarget(
      exception: Exception('Null check operator used on a null value'),
      uri: Uri.parse('https://sss.hmac.kr/ko/signin'),
      preferredLocaleCode: 'ko',
    );

    expect(target, isNull);
  });

  test('Null check 오류여도 /ko/profile에서는 복구 이동하지 않음', () {
    final target = computeNullCheckRecoveryTarget(
      exception: Exception('Null check operator used on a null value'),
      uri: Uri.parse('https://sss.hmac.kr/ko/profile'),
      preferredLocaleCode: 'ko',
    );

    expect(target, isNull);
  });

  test('다른 오류 메시지면 복구 이동하지 않음', () {
    final target = computeNullCheckRecoveryTarget(
      exception: Exception('Some other error'),
      uri: Uri.parse('https://sss.hmac.kr/ko'),
      preferredLocaleCode: 'ko',
    );

    expect(target, isNull);
  });
}
