package taxonomy

import (
	"log/slog"

	"github.com/costap/quarkshologridledger/tongo-core/internal/domain/entity"
)

// YAMLLoader implements port.TaxonomyPort by reading from a YAML file.
type YAMLLoader struct {
	path   string
	logger *slog.Logger
}

// New creates a new YAMLLoader instance.
func New(path string, logger *slog.Logger) *YAMLLoader {
	return &YAMLLoader{
		path:   path,
		logger: logger,
	}
}

// Intermediary YAML file schema types
type taxonomyFile struct {
	Quadrants       []yamlQuadrant      `yaml:"quadrants"`
	MarketTemplates []yamlMarketTemplate `yaml:"market_templates"`
	Venues          []yamlVenue         `yaml:"sector_pool"`
}

type yamlQuadrant struct {
	ID              string         `yaml:"id"`
	Name            string         `yaml:"name"`
	Designation     string         `yaml:"designation"`
	ColorCode       string         `yaml:"color_code"`
	BaseVolatility  float64        `yaml:"base_volatility"`
	Factions        []yamlFaction  `yaml:"factions"`
}

type yamlFaction struct {
	ID                 string             `yaml:"id"`
	Name               string             `yaml:"name"`
	Abbreviation       string             `yaml:"abbreviation"`
	Type               string             `yaml:"type"`
	Homeworld          string             `yaml:"homeworld"`
	ColorCode          string             `yaml:"color_code"`
	EmblemGlyph        string             `yaml:"emblem_glyph"`
	BaseShieldStrength int                `yaml:"base_shield_strength"`
	BaseAttackPower    int                `yaml:"base_attack_power"`
	BaseEvasion        int                `yaml:"base_evasion"`
	RivalryModifiers   map[string]float64 `yaml:"rivalry_modifiers"`
}

type yamlVenue struct {
	ID                 string   `yaml:"id"`
	Name               string   `yaml:"name"`
	Quadrant           string   `yaml:"quadrant"`
	Coordinates        string   `yaml:"coordinates"`
	ShieldModifier     float64  `yaml:"shield_modifier"`
	DamageModifier     float64  `yaml:"damage_modifier"`
	EvasionModifier    float64  `yaml:"evasion_modifier"`
	SpecialEventChance float64  `yaml:"special_event_chance"`
	Status             string   `yaml:"status"`
	Tags               []string `yaml:"tags"`
}

type yamlMarketTemplate struct {
	ID          string                  `yaml:"id"`
	Name        string                  `yaml:"name"`
	Description string                  `yaml:"description"`
	Category    string                  `yaml:"category"`
	Selections  []yamlSelectionTemplate `yaml:"selections"`
}

type yamlSelectionTemplate struct {
	Type      string  `yaml:"type"`
	Name      string  `yaml:"name,omitempty"`
	Suffix    string  `yaml:"suffix,omitempty"`
	BasePrice float64 `yaml:"base_price"`
}

// LoadQuadrants returns all quadrant definitions including their factions.
func (l *YAMLLoader) LoadQuadrants() ([]entity.Quadrant, error) {
	l.logger.Debug("Loading quadrants from taxonomy")
	return nil, nil
}

// LoadVenues returns all sector pool venue definitions.
func (l *YAMLLoader) LoadVenues() ([]entity.Venue, error) {
	l.logger.Debug("Loading venues from taxonomy")
	return nil, nil
}

// LoadMarketTemplates returns all market template definitions.
func (l *YAMLLoader) LoadMarketTemplates() ([]entity.MarketTemplate, error) {
	l.logger.Debug("Loading market templates from taxonomy")
	return nil, nil
}

func (l *YAMLLoader) loadFile() (*taxonomyFile, error) {
	return nil, nil
}
