// internal/templating/embedded.go
package templating

import (
	"fmt"
	"io/fs"
	"os"
	"path/filepath"
	"sunhpc/data/tmpls"

	"gopkg.in/yaml.v3"
)

// ListEmbeddedTemplates 返回所有内置模板名称（不含路径和扩展名）
func ListEmbeddedTemplates() ([]string, error) {
	entries, err := fs.ReadDir(tmpls.ConfigFS, ".")
	if err != nil {
		return nil, err
	}
	var names []string
	for _, entry := range entries {
		if entry.IsDir() || filepath.Ext(entry.Name()) != ".yaml" {
			continue
		}
		names = append(names, entry.Name()[:len(entry.Name())-5]) // 去掉 .yaml
	}
	return names, nil
}

// LoadEmbeddedTemplate 从二进制加载内置模板
func LoadEmbeddedTemplate(name string) (*Template, error) {
	data, err := tmpls.ConfigFS.ReadFile(name + ".yaml")
	if err != nil {
		if os.IsNotExist(err) {
			return nil, fmt.Errorf("内置模板 '%s' 不存在", name)
		}
		return nil, err
	}
	var tmpl Template
	if err := yaml.Unmarshal(data, &tmpl); err != nil {
		return nil, fmt.Errorf("解析内置模板失败: %w", err)
	}
	return &tmpl, nil
}

// DumpEmbeddedTemplateToFile 将内置模板写入文件
func DumpEmbeddedTemplateToFile(name, outputPath string) error {
	data, err := tmpls.ConfigFS.ReadFile(name + ".yaml")
	if err != nil {
		return fmt.Errorf("找不到内置模板 '%s': %w", name, err)
	}
	return os.WriteFile(outputPath, data, 0644)
}
