package core

import (
	"encoding/json"
	"fmt"
	"os"
	"path/filepath"
	"strings"
	"testing"
)

// TestFixtureLoad carga un archivo de fixture JSON o YAML y lo deserializa en dst.
// JSON: usa encoding/json de stdlib.
// YAML: stub — retorna error indicando que no esta implementado.
// Llama t.Helper() para que los errores apunten al test llamante.
func TestFixtureLoad(t *testing.T, path string, dst any) error {
	t.Helper()

	data, err := os.ReadFile(path)
	if err != nil {
		return fmt.Errorf("TestFixtureLoad: read %q: %w", path, err)
	}

	ext := strings.ToLower(filepath.Ext(path))
	switch ext {
	case ".json":
		if err := json.Unmarshal(data, dst); err != nil {
			return fmt.Errorf("TestFixtureLoad: json unmarshal %q: %w", path, err)
		}
		return nil
	case ".yaml", ".yml":
		return fmt.Errorf("TestFixtureLoad: YAML not implemented — add gopkg.in/yaml.v3 and use yaml.Unmarshal")
	default:
		return fmt.Errorf("TestFixtureLoad: unsupported extension %q (supported: .json, .yaml, .yml)", ext)
	}
}
