import '../../../../core/network/ws_client.dart';

abstract class GameEvent {}

/// شروع اتصال با اقدامِ ورود (join_queue / create_table / join_table).
class ConnectGameEvent extends GameEvent {
  final Map<String, dynamic> joinAction;
  ConnectGameEvent(this.joinAction);
}

/// پیام دریافتی از سرور (داخلی).
class GameMessageReceived extends GameEvent {
  final Map<String, dynamic> message;
  GameMessageReceived(this.message);
}

/// تغییر وضعیت اتصال (داخلی).
class GameStatusChanged extends GameEvent {
  final WsStatus status;
  GameStatusChanged(this.status);
}

class ChooseTrumpEvent extends GameEvent {
  final String suit;
  ChooseTrumpEvent(this.suit);
}

class PlayCardEvent extends GameEvent {
  final String card;
  PlayCardEvent(this.card);
}

class ReshuffleEvent extends GameEvent {} // بُرِ مجدد با مصرفِ یک بلیت

/// ارسالِ پیام/شکلک (یکی از text یا emoji پر است).
class SendChatEvent extends GameEvent {
  final String? text;
  final String? emoji;
  SendChatEvent({this.text, this.emoji});
}

/// پاک‌کردنِ حبابِ پیامِ یک جایگاه پس از انقضا (id برای جلوگیری از پاکِ حبابِ جدیدتر).
class ExpireChatEvent extends GameEvent {
  final int seat;
  final int id;
  ExpireChatEvent(this.seat, this.id);
}

class LeaveGameEvent extends GameEvent {}

class StartTableEvent extends GameEvent {
  final int hands; // تعداد دستِ انتخابی (۳/۵/۷)
  final int stake; // شرطِ سکه‌ایِ هر بازیکن
  StartTableEvent(this.hands, {this.stake = 0});
}

class SetStakeEvent extends GameEvent {
  final int stake; // شرطِ سکه‌ایِ میز (تنظیمِ زنده‌ی میزبان)
  SetStakeEvent(this.stake);
}

class RotateTableEvent extends GameEvent {
  final int dir; // +۱/−۱ جهتِ چرخشِ جایگاه‌ها
  RotateTableEvent(this.dir);
}

class LeaveTableEvent extends GameEvent {}

class ClearNoticeEvent extends GameEvent {}
