package skills

// SkillMeta es la metadata extraida del frontmatter YAML del SKILL.md.
// Es la representacion minima de una skill que siempre esta en contexto.
type SkillMeta struct {
	Name        string `yaml:"name"`
	Description string `yaml:"description"`
	Category    string // derivado de la ruta del directorio (devops, analysis, etc.)
}

// Skill es la representacion completa de una skill cargada.
// Incluye metadata, instrucciones completas y rutas a recursos.
type Skill struct {
	Meta         SkillMeta
	Instructions string   // cuerpo markdown del SKILL.md (sin frontmatter)
	BasePath     string   // ruta absoluta al directorio de la skill
	Scripts      []string // rutas relativas a scripts/ (ej: ["deploy.sh", "rollback.sh"])
	References   []string // rutas relativas a references/
	Templates    []string // rutas relativas a templates/
	Assets       []string // rutas relativas a assets/
}

// SkillMatch indica si una skill es relevante para un contexto dado.
// Se usa como resultado de la funcion Match.
type SkillMatch struct {
	Skill      SkillMeta
	Confidence float64 // 0.0 - 1.0
}

// ByConfidence implementa sort.Interface para ordenar SkillMatch por confidence descendente.
type ByConfidence []SkillMatch

func (a ByConfidence) Len() int           { return len(a) }
func (a ByConfidence) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }
func (a ByConfidence) Less(i, j int) bool { return a[i].Confidence > a[j].Confidence }
