/// یک فرشِ ایرانی که به‌جای میزِ بازی استفاده می‌شود. تصویر (URL کامل) از backend می‌آید. class Carpet { final String id; final String title; final int priceCoins; final bool vip; // برای VIP رایگان final String img; // URL کاملِ تصویر (از سرور)؛ خالی برای classic final bool owned; const Carpet({ required this.id, required this.title, required this.priceCoins, required this.vip, required this.img, required this.owned, }); /// 'classic' یعنی میزِ ترسیمیِ پیش‌فرض (بدون تصویر). bool get isClassic => id == 'classic'; factory Carpet.fromJson(Map j) => Carpet( id: (j['id'] ?? '') as String, title: (j['title'] ?? '') as String, priceCoins: (j['price_coins'] ?? 0) as int, vip: (j['vip'] ?? false) as bool, img: (j['img'] ?? '') as String, owned: (j['owned'] ?? false) as bool, ); } /// نتیجه‌ی دریافتِ فرش‌ها: فهرست + شناسه‌ی فرشِ انتخابی. class CarpetCatalog { final List carpets; final String selected; const CarpetCatalog({required this.carpets, required this.selected}); }