package partial

import (
	"os"
	"path"
	"strings"

	"git.clearsky.net.au/cody/gex.git/gen/domquery"
	"git.clearsky.net.au/cody/gex.git/utils"
)

func ProcessHTML(htmlStr string, fp string) (string, error) {
	dom := domquery.LoadHTML(htmlStr)

	partTag := dom.QuerySelector("part")

	if partTag.TagName() == "" {
		return dom.OuterHTML(), nil
	}

	attr := partTag.GetAttribute("src")

	// Set path
	attr = strings.TrimPrefix(attr, "/")
	if !strings.Contains(attr, "app/") {
		dirPath := path.Dir(fp)
		attr = dirPath + "/" + attr
	}
	attr = strings.Replace(attr, ".tpl", ".gen.tpl", 1)

	partFileByt, err := os.ReadFile(attr)
	if err != nil {
		utils.Err(err)
		return "", err
	}
	partFileHtml := string(partFileByt)
	partFileDom := domquery.LoadHTML(partFileHtml)

	slot := partFileDom.QuerySelector("slot")
	if slot.TagName() != "" {
		slot.SetOuterHTML(partTag.InnerHTML())
	}
	partTag.SetOuterHTML(partFileDom.InnerHTML())

	htmlStr, err = ProcessHTML(dom.InnerHTML(), fp)
	if err != nil {
		utils.Err(err)
		return "", err
	}
	return htmlStr, nil
}