package ws // Settler تسویه‌ی اقتصادی میز را انجام می‌دهد (پیاده‌سازی در لایه economy). // لایه ws از جزئیات سکه/جایزه بی‌خبر است و فقط tier را پاس می‌دهد. type Settler interface { ChargeEntry(userID int64, tier string) error // کسر ورودی هنگام ورود به صف Refund(userID int64, tier string) // بازگرداندن ورودی در صورت لغو AwardWinner(userID int64, tier string) // جایزه/XP/جام به برنده AwardRank(userID int64, tier string, won bool) // امتیازِ رتبه (میزِ رتبه‌بندی) RecordGame(room, playersJSON string, winnerTeam int, kot bool) // آمار پروفایل (همگی غیرحیاتی و fire-and-forget). RecordHand(userID int64, won, kot, asHakem bool) // پایان یک هَند RecordCut(userID int64) // بُرِش با حکم RecordGameResult(userID int64, won bool) // پایان بازی (برد/باخت) // PlayerProfile سکه، نشانِ رتبه، آواتار، قاب و شخصیتِ آواتارِ انتخابیِ بازیکن را // برای نمایش سرِ میز برمی‌گرداند (avatarImg خالی ⇒ آواتارِ تصادفیِ پیش‌فرض). PlayerProfile(userID int64) (coins int64, rankTier, avatar, frame, avatarImg string) // ChargeTicket یک بلیت برای بُرِ مجدد در فازِ انتخابِ حکم مصرف می‌کند. ChargeTicket(userID int64) error // ChargeCoins/AwardCoins برای شرطِ سکه‌ایِ میزِ خصوصی (pot). Charge در صورتِ // کمبودِ موجودی خطا می‌دهد؛ Award سکه را به برنده اضافه می‌کند. ChargeCoins(userID int64, amount int64, ref string) error AwardCoins(userID int64, amount int64, ref string) // میز خصوصی (دورهمی). ChargePrivateTable(userID int64) error // مصرفِ یک میز رایگان (خطا اگر سقف پر باشد) PrivateTableInfo(userID int64) (remaining int, unlimited bool) // TargetHands تعداد هَندِ لازم برای برد بازی در این tier (مثلاً مبتدی=۳). TargetHands(tier string) int } // noopSettler پیش‌فرض (برای تست‌ها و حالت بدون اقتصاد). type noopSettler struct{} func (noopSettler) ChargeEntry(int64, string) error { return nil } func (noopSettler) Refund(int64, string) {} func (noopSettler) AwardWinner(int64, string) {} func (noopSettler) AwardRank(int64, string, bool) {} func (noopSettler) RecordGame(string, string, int, bool) {} func (noopSettler) RecordHand(int64, bool, bool, bool) {} func (noopSettler) RecordCut(int64) {} func (noopSettler) RecordGameResult(int64, bool) {} func (noopSettler) PlayerProfile(int64) (int64, string, string, string, string) { return 0, "", "", "", "" } func (noopSettler) ChargeTicket(int64) error { return nil } func (noopSettler) ChargeCoins(int64, int64, string) error { return nil } func (noopSettler) AwardCoins(int64, int64, string) {} func (noopSettler) ChargePrivateTable(int64) error { return nil } func (noopSettler) PrivateTableInfo(int64) (int, bool) { return 0, true } func (noopSettler) TargetHands(string) int { return 7 }