import 'package:block_seasons/data/content_repository.dart';
import 'package:block_seasons/game/models/season.dart';
import 'package:block_seasons/game/models/stage.dart';
import 'package:block_seasons/state/providers.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_test/flutter_test.dart';

class _FakeRepo extends ContentRepository {
  _FakeRepo(this.result);
  final bool result;
  int calls = 0;

  @override
  Future<bool> refresh() async {
    calls++;
    return result;
  }
}

SeasonPack _pack(String id) => SeasonPack(
      schemaVersion: 1,
      seasonId: id,
      version: 1,
      title: const {'en': 'Test Season', 'ko': '테스트 시즌'},
      theme: SeasonTheme.fallback,
      stages: [
        StageConfig(
          id: 's1',
          seed: 1,
          moveLimit: 10,
          preset: const [],
          objectives: const [],
          stars: const StarThresholds(twoMovesLeft: 2, threeMovesLeft: 4),
          generatorProfile: 'mid',
        ),
      ],
    );

void main() {
  test('seasonRefreshProvider runs refresh once and exposes the result',
      () async {
    final repo = _FakeRepo(true);
    final container = ProviderContainer(
      overrides: [contentRepositoryProvider.overrideWithValue(repo)],
    );
    addTearDown(container.dispose);

    expect(await container.read(seasonRefreshProvider.future), isTrue);
    // Re-reading does not re-run (FutureProvider caches).
    expect(await container.read(seasonRefreshProvider.future), isTrue);
    expect(repo.calls, 1);
  });

  test('activeSeason starts at Season 1 (first by id)', () {
    final p1 = _pack('season_001');
    final p2 = _pack('season_002');
    expect(activeSeason([p1, p2]).seasonId, 'season_001');
  });
}
