import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../game/models/season.dart'; import '../game/models/stage.dart'; import 'providers.dart'; class SeasonFlow { const SeasonFlow({required this.pack, required this.index}); final SeasonPack pack; final int index; StageConfig get stage => pack.stages[index]; bool get hasNext => index + 1 < pack.stages.length; } /// Orchestrates which season stage is being played: starting stages, /// recording wins, advancing to the next stage. class SeasonFlowNotifier extends Notifier { @override SeasonFlow? build() => null; void startSeasonStage(SeasonPack pack, int index) { state = SeasonFlow(pack: pack, index: index); ref.read(gameSessionProvider.notifier).startStage(pack.stages[index]); } Future recordWin({required int stars, required int score}) async { final flow = state; if (flow == null) return; await ref.read(progressProvider.notifier).record( seasonId: flow.pack.seasonId, stageId: flow.stage.id, stars: stars, score: score, ); } void nextStage() { final flow = state; if (flow == null || !flow.hasNext) return; startSeasonStage(flow.pack, flow.index + 1); } }