// D2R-specific configuration: colors, timings, and resolution profiles.
package d2r

import (
	"image"

	"git.cloonar.com/openclawd/iso-bot/pkg/engine/resolution"
)

// HSVRange defines a color range in HSV space.
type HSVRange struct {
	LowerH, LowerS, LowerV int
	UpperH, UpperS, UpperV int
}

// Colors defines HSV ranges for game elements.
type Colors struct {
	HealthFilled HSVRange
	ManaFilled   HSVRange
	ItemUnique   HSVRange
	ItemSet      HSVRange
	ItemRare     HSVRange
	ItemRuneword HSVRange
	PortalBlue   HSVRange
}

// Timings defines game-specific delay constants.
type Timings struct {
	LoadingScreenMaxMs int
	TownPortalCastMs   int
	TeleportDelayMs    int
	PotionCooldownMs   int
	PickupDelayMs      int
}

// Config holds all D2R-specific configuration.
type Config struct {
	Colors  Colors
	Timings Timings

	// Loot settings
	PickupUniques bool
	PickupSets    bool
	PickupRares   bool
	PickupRunes   bool
	MinRuneTier   int
	PickupGems    bool

	// Safety thresholds (0.0 - 1.0)
	HealthPotionThreshold float64
	ManaPotionThreshold   float64
	ChickenThreshold      float64 // exit game if health below this
}

// DefaultConfig returns the default D2R configuration.
func DefaultConfig() Config {
	return Config{
		Colors: Colors{
			// Updated ranges based on real D2R screenshot analysis
			// Health orb - includes the actual colors found (olive/brown when low, reds when high)
			HealthFilled: HSVRange{0, 30, 10, 100, 255, 255},   // Wide range: reds through yellows/browns
			// Mana orb - includes the actual colors found (dark/brown when low, blues when high)
			ManaFilled:   HSVRange{40, 20, 10, 250, 255, 255},  // Browns through blues  
			ItemUnique:   HSVRange{15, 100, 180, 30, 255, 255},
			ItemSet:      HSVRange{35, 100, 150, 55, 255, 255},
			ItemRare:     HSVRange{15, 50, 200, 25, 150, 255},
			ItemRuneword: HSVRange{15, 100, 180, 30, 255, 255},
			PortalBlue:   HSVRange{90, 150, 150, 120, 255, 255},
		},
		Timings: Timings{
			LoadingScreenMaxMs: 15000,
			TownPortalCastMs:   3500,
			TeleportDelayMs:    150,
			PotionCooldownMs:   1000,
			PickupDelayMs:      300,
		},
		PickupUniques:         true,
		PickupSets:            true,
		PickupRares:           true,
		PickupRunes:           true,
		MinRuneTier:           10,
		PickupGems:            false,
		HealthPotionThreshold: 0.5,
		ManaPotionThreshold:   0.3,
		ChickenThreshold:      0.2,
	}
}

// RegisterProfiles registers D2R resolution profiles with the resolution registry.
func RegisterProfiles(registry *resolution.Registry) error {
	profiles := []*resolution.Profile{
		// 1920x1080 (1080p) - Primary resolution
		{
			Width:  1920,
			Height: 1080,
			Label:  "1080p",
			Regions: map[string]image.Rectangle{
				"health_orb":  image.Rect(28, 545, 198, 715),
				"mana_orb":    image.Rect(1722, 545, 1892, 715),
				"xp_bar":      image.Rect(0, 1058, 1920, 1080),
				"belt":        image.Rect(838, 1010, 1082, 1058),
				"minimap":     image.Rect(1600, 0, 1920, 320),
				"inventory":   image.Rect(960, 330, 1490, 770),
				"stash":       image.Rect(430, 330, 960, 770),
				"skill_left":  image.Rect(194, 1030, 246, 1078),
				"skill_right": image.Rect(1674, 1030, 1726, 1078),
			},
		},
		// 1280x720 (720p) - Secondary resolution
		{
			Width:  1280,
			Height: 720,
			Label:  "720p",
			Regions: map[string]image.Rectangle{
				"health_orb":  image.Rect(19, 363, 132, 477),
				"mana_orb":    image.Rect(1148, 363, 1261, 477),
				"xp_bar":      image.Rect(0, 705, 1280, 720),
				"belt":        image.Rect(559, 673, 721, 705),
				"minimap":     image.Rect(1067, 0, 1280, 213),
				"inventory":   image.Rect(640, 220, 993, 513),
				"stash":       image.Rect(287, 220, 640, 513),
				"skill_left":  image.Rect(129, 685, 164, 718),
				"skill_right": image.Rect(1116, 685, 1151, 718),
			},
		},
	}

	return registry.RegisterMultiple("d2r", profiles)
}
