package economy

// مقادیر اقتصادی پایه (قابل تنظیم بر اساس بیزینس‌پلن).
const (
	DailyReward = 200 // سکه روزانه
	AdReward    = 50  // سکه به ازای هر تبلیغ rewardedِ کامل
	AdDailyCap  = 50  // سقف تعداد تبلیغ پاداش‌دار در روز
)

// CoinPackage بسته‌ی سکه با پول واقعی (IAP) — ممکن است VIP هم بدهد.
// SKU شناسه‌ی محصول در پنلِ مایکت/کافه‌بازار (uuid) است.
type CoinPackage struct {
	ID         string `json:"id"`
	Title      string `json:"title"`
	Coins      int64  `json:"coins"`
	VIPDays    int    `json:"vip_days"`
	PriceToman int    `json:"price_toman"`
	BonusPct   int    `json:"bonus_pct"`
	SKU        string `json:"sku"`
}

// TicketPackage بسته‌ی بلیط با پول واقعی (IAP).
type TicketPackage struct {
	ID         string `json:"id"`
	Title      string `json:"title"`
	Tickets    int64  `json:"tickets"`
	PriceToman int    `json:"price_toman"`
	SKU        string `json:"sku"`
}

// CardSkin اسکین کارت که با سکه باز می‌شود (قیمت ۰ یعنی پیش‌فرض رایگان).
type CardSkin struct {
	ID         string `json:"id"`
	Title      string `json:"title"`
	PriceCoins int64  `json:"price_coins"`
}

// Booster بوستر XP با پول واقعی (IAP).
type Booster struct {
	ID         string `json:"id"`
	Title      string `json:"title"`
	Multiplier int    `json:"multiplier"`
	Hours      int    `json:"hours"`
	PriceToman int    `json:"price_toman"`
	SKU        string `json:"sku"`
}

// VIPPackage بسته‌ی اشتراک VIP با پول واقعی (IAP).
type VIPPackage struct {
	ID         string `json:"id"`
	Title      string `json:"title"`
	Months     int    `json:"months"`
	PriceToman int    `json:"price_toman"`
	SKU        string `json:"sku"`
}

// TableTier نوع میز: تعداد دست، ورودی، جایزه، XP و جام.
// RankReward > 0 یعنی میزِ رتبه‌بندی است (به برنده امتیازِ رتبه می‌دهد).
type TableTier struct {
	ID         string `json:"id"`
	Title      string `json:"title"`
	Hands      int    `json:"hands"`
	Entry      int64  `json:"entry"`
	Prize      int64  `json:"prize"`
	XP         int    `json:"xp"`
	Trophy     int    `json:"trophy"`
	RankReward int    `json:"rank_reward"`
}

// Catalog کل کاتالوگ فروشگاه (برای GET /api/shop). از دیتابیس بارگذاری می‌شود.
type Catalog struct {
	CoinPackages   []CoinPackage   `json:"coin_packages"`
	TicketPackages []TicketPackage `json:"ticket_packages"`
	CardSkins      []CardSkin      `json:"card_skins"`
	Boosters       []Booster       `json:"boosters"`
	VIPPackages    []VIPPackage    `json:"vip_packages"`
	TableTiers     []TableTier     `json:"table_tiers"`
}

// rankTiers آستانه‌ی امتیازِ هر نشانِ رتبه (از پایین به بالا).
var rankTiers = []struct {
	Name string
	Min  int64
}{
	{"bronze", 0},
	{"silver", 500},
	{"gold", 1500},
	{"diamond", 3000},
	{"king", 5000},
}

// RankTier نام و اندیسِ نشانِ رتبه را از امتیازِ رتبه برمی‌گرداند.
func RankTier(points int64) (name string, index int) {
	name, index = rankTiers[0].Name, 0
	for i, t := range rankTiers {
		if points >= t.Min {
			name, index = t.Name, i
		}
	}
	return name, index
}

// LevelInfo سطح فعلی، XP درون‌سطح و XP لازم برای سطح بعد را از XP کل محاسبه می‌کند.
// نیاز هر سطح: ۵۰ × شماره سطح (مثلاً سطح ۸ ⇒ ۴۰۰).
func LevelInfo(totalXP int64) (level int, into int64, need int64) {
	level = 1
	remaining := totalXP
	for {
		need = int64(50 * level)
		if remaining < need {
			break
		}
		remaining -= need
		level++
	}
	into = remaining
	return level, into, need
}
