package input

import (
	"blazing/common/data/xmlres"

	"github.com/gogf/gf/v2/util/gconv"
)

// 异常状态常量定义（对应数组索引）
const (
	StatusParalysis = 0 // 麻痹
	StatusPoison    = 1 // 中毒
	StatusSleep     = 8 // 睡眠
	StatusFreeze    = 3 // 冰冻
	// 预留其他状态到19
)

// getItemBonus 获取道具倍率
func getItemBonus(itemID uint32) float64 {
	if bonus, ok := xmlres.ItemsMAP[int(itemID)]; ok {
		return gconv.Float64(bonus.Bonus)
	}
	return 1.0
}

// CaptureDetails 捕捉详情
type CaptureDetails struct {
	Success        bool
	Mode           string
	BaseRate       float64
	ModifiedRate   float64
	GuaranteeBonus float64 // 百分比
	StatusBonus    float64 // 状态倍率
	Details        string
}

// func main() {
// 	ctx := NewPlayerCaptureContext()
// 	fmt.Println("=== 精灵捕捉系统测试（状态数组版） ===")

// 	// 测试1：不同异常状态组合
// 	fmt.Println("\n--- 异常状态测试 ---")
// 	// 无异常状态
// 	var noStatus [20]byte
// 	// 中毒状态
// 	var poisonStatus [20]byte
// 	poisonStatus[StatusPoison] = 1
// 	// 睡眠+冰冻状态（取最高倍率2.0）
// 	var multipleStatus [20]byte
// 	multipleStatus[StatusSleep] = 1
// 	multipleStatus[StatusFreeze] = 1

// 	statusTests := []struct {
// 		name   string
// 		status [20]byte
// 	}{
// 		{"无异常状态", noStatus},
// 		{"中毒状态", poisonStatus},
// 		{"睡眠+冰冻状态", multipleStatus},
// 	}

// 	for _, test := range statusTests {
// 		params := CaptureParams{
// 			PetID:      1001,
// 			MaxHP:      100,
// 			CurrentHP:  10,
// 			CatchRate:  50,
// 			CatchDenom: 100,
// 			ItemID:     300001,
// 			Statuses:   test.status,
// 			OwnedCount: -1,
// 		}
// 		_, details := ctx.Capture(params)
// 		fmt.Printf("%s: 状态倍率=%.1f | 基础成功率=%.2f%%\n",
// 			test.name, details.StatusBonus, details.BaseRate)
// 	}

// 	// 测试2：无敌胶囊
// 	fmt.Println("\n--- 无敌胶囊测试 ---")
// 	invincibleParams := CaptureParams{
// 		PetID:      9999,
// 		MaxHP:      1000,
// 		CurrentHP:  1000,
// 		CatchRate:  1,
// 		CatchDenom: 1000,
// 		ItemID:     300006,
// 		Statuses:   noStatus,
// 		OwnedCount: -1,
// 	}
// 	success, details := ctx.Capture(invincibleParams)
// 	fmt.Printf("捕捉结果: %v | 模式: %s | 成功率: %.2f%%\n",
// 		success, details.Mode, details.ModifiedRate)

// 	// 测试3：锁定模式
// 	fmt.Println("\n--- 锁定模式测试 ---")
// 	lockParams := CaptureParams{
// 		PetID:      1002,
// 		MaxHP:      50,
// 		CurrentHP:  1,
// 		CatchRate:  100,
// 		CatchDenom: 100,
// 		ItemID:     300003,
// 		Statuses:   poisonStatus,
// 		OwnedCount: 0,
// 	}
// 	success, details = ctx.Capture(lockParams)
// 	fmt.Printf("捕捉结果: %v | 模式: %s | 成功率: %.2f%%\n",
// 		success, details.Mode, details.ModifiedRate)

// 	// 测试4：衰减模式
// 	fmt.Println("\n--- 衰减模式测试 ---")
// 	decayParams := CaptureParams{
// 		PetID:      1003,
// 		MaxHP:      100,
// 		CurrentHP:  10,
// 		CatchRate:  50,
// 		CatchDenom: 100,
// 		ItemID:     300002,
// 		Statuses:   multipleStatus,
// 		OwnedCount: 1,
// 	}

// 	for i := 1; i <= 5; i++ {
// 		decayParams.OwnedCount = i
// 		success, details := ctx.Capture(decayParams)
// 		fmt.Printf("拥有%d只 - 结果: %v | 基础成功率: %.2f%% | 实际成功率: %.2f%%\n",
// 			i, success, details.BaseRate, details.ModifiedRate)
// 	}
// }
