import 'package:flutter/foundation.dart';

/// دروازه‌ی انیمیشنِ صحنه: نگه‌دارِ سه فازِ «مشغولِ انیمیشن» که در آن‌ها بازیِ کارت
/// قفل است و کارت‌ها/پشت‌کارت‌ها ممکن است پنهان شوند — اینترو («جستجوی حریف»)،
/// بُر زدن، و پخشِ بقیه‌ی کارت‌ها. یک [animating] هم برای HUD/دیالوگِ حکم می‌دهد.
class AnimGate {
  bool _intro = true;
  bool _pendingShuffle = false; // بُرِ دستِ اول که تا پایانِ اینترو معوق مانده
  bool _shuffling = false;
  bool _dealing = false;

  /// آیا انیمیشنی در جریان است (صفحه از این برای پنهان‌کردنِ دیالوگِ حکم استفاده می‌کند).
  final ValueNotifier<bool> animating = ValueNotifier(true);

  bool get introActive => _intro;
  bool get shuffling => _shuffling;
  bool get dealing => _dealing;

  /// در جریانِ هر انیمیشنِ قفل‌کننده (بازیِ کارت ممنوع، صدا خاموش).
  bool get busy => _intro || _shuffling || _dealing;

  /// در اینترو یا بُر زدن — کارت‌های دست/پشت‌کارت‌ها پنهان‌اند (انیمیشن خودش پخش می‌کند).
  bool get cardsHidden => _intro || _shuffling;

  void _refresh() => animating.value = busy;

  void markPendingShuffle() => _pendingShuffle = true;

  /// پایانِ اینترو؛ true اگر بُرِ معوقِ دستِ اول باید اکنون اجرا شود.
  bool endIntro() {
    _intro = false;
    final run = _pendingShuffle;
    _pendingShuffle = false;
    _refresh();
    return run;
  }

  void beginShuffle() {
    _shuffling = true;
    _refresh();
  }

  void endShuffle() {
    _shuffling = false;
    _refresh();
  }

  void beginDeal() {
    _dealing = true;
    _refresh();
  }

  void endDeal() {
    _dealing = false;
    _refresh();
  }
}
