package gen

import (
	"git.clearsky.net.au/cody/gex.git/pkg/gen/domquery"
)

func AddClassAttr(htmlStr string, className string) string {
	dom := domquery.LoadHTML(htmlStr)

	tags := dom.QuerySelectorAll("*")

	for _, tag := range tags {
		if isExcludedTag(tag.TagName()) {
			continue
		}
		tag.ClassListAdd(className)

	}
	return dom.InnerHTML()
}

func isExcludedTag(tagName string) bool {

	validTags := map[string]bool{
		"html":   true,
		"head":   true,
		"style":  true,
		"script": true,
		"link":   true,
		"meta":   true,
		"title":  true,
		"slot":   true,
		"block":  true,
		"layout": true,
		"part":   true,
	}

	return validTags[tagName]
}

// func isTargetTag(tagName string) bool {

// 	validTags := map[string]bool{
// 		"a":          true,
// 		"abbr":       true,
// 		"address":    true,
// 		"area":       true,
// 		"article":    true,
// 		"aside":      true,
// 		"audio":      true,
// 		"b":          true,
// 		"blockquote": true,
// 		"body":       true,
// 		"br":         true,
// 		"button":     true,
// 		"canvas":     true,
// 		"caption":    true,
// 		"cite":       true,
// 		"code":       true,
// 		"col":        true,
// 		"colgroup":   true,
// 		"data":       true,
// 		"datalist":   true,
// 		"dd":         true,
// 		"del":        true,
// 		"details":    true,
// 		"dialog":     true,
// 		"div":        true,
// 		"dl":         true,
// 		"dt":         true,
// 		"em":         true,
// 		"fieldset":   true,
// 		"figcaption": true,
// 		"figure":     true,
// 		"footer":     true,
// 		"form":       true,
// 		"h1":         true,
// 		"h2":         true,
// 		"h3":         true,
// 		"h4":         true,
// 		"h5":         true,
// 		"h6":         true,
// 		"header":     true,
// 		"hr":         true,
// 		"i":          true,
// 		"iframe":     true,
// 		"img":        true,
// 		"input":      true,
// 		"ins":        true,
// 		"kbd":        true,
// 		"label":      true,
// 		"legend":     true,
// 		"li":         true,
// 		"main":       true,
// 		"map":        true,
// 		"mark":       true,
// 		"meter":      true,
// 		"nav":        true,
// 		"noscript":   true,
// 		"object":     true,
// 		"ol":         true,
// 		"option":     true,
// 		"optgroup":   true,
// 		"p":          true,
// 		"picture":    true,
// 		"pre":        true,
// 		"progress":   true,
// 		"q":          true,
// 		"samp":       true,
// 		"section":    true,
// 		"select":     true,
// 		"small":      true,
// 		"source":     true,
// 		"span":       true,
// 		"strong":     true,
// 		"sub":        true,
// 		"summary":    true,
// 		"sup":        true,
// 		"svg":        true,
// 		"table":      true,
// 		"tbody":      true,
// 		"td":         true,
// 		"textarea":   true,
// 		"tfoot":      true,
// 		"th":         true,
// 		"thead":      true,
// 		"time":       true,
// 		"tr":         true,
// 		"track":      true,
// 		"u":          true,
// 		"ul":         true,
// 		"var":        true,
// 		"video":      true,
// 		"wbr":        true,

// 		"label-wc":    true,
// 		"textarea-wc": true,
// 		"fieldset-wc": true,
// 		"input-wc":    true,
// 		"select-wc":   true,
// 		"button-wc":   true,
// 	}

// 	return validTags[tagName]
// }

func ExtractCSS(htmlStr *string) string {
	document := domquery.LoadHTML(*htmlStr)
	styleTag := document.QuerySelector("style")

	css := ""
	if styleTag.InnerHTML() != "" {
		css = styleTag.InnerHTML()
		styleTag.SetOuterHTML("")
		*htmlStr = document.InnerHTML()
	}
	return css
}
