package handlers

import (
	_ "embed"
	"log"
	"net/http"
	"strings"

	"leadb2b.org/internal/render"
	"leadb2b.org/internal/stats"
)

//go:embed sitepages/index.html
var homePageHTML string

const homeCNAECatalogMarker = "<!-- LEADB2B_CNAE_CATALOG -->"

func (h *Handler) Home(w http.ResponseWriter, r *http.Request) {
	html := RewriteSiteHTML(homePageHTML)
	html = applyHomeStats(html)

	catalog, err := h.homeCNAECatalog(r)
	if err == nil && catalog != "" {
		html = strings.Replace(html, homeCNAECatalogMarker, catalog, 1)
	}

	meta := render.HomePageMeta(h.siteURL)
	html = render.InjectPageMeta(html, meta)
	html = strings.Replace(html, "</head>", render.GEOMonitorHTMLComment()+"\n</head>", 1)

	statsLabel := "milhões de"
	if file, err := stats.Load(stats.DefaultPath); err == nil {
		if v, ok := file.Value("empresas_indice"); ok {
			statsLabel = stats.FormatMillionsLabel(v)
			statsLabel = strings.TrimSuffix(statsLabel, " empresas")
		}
	}
	geoBlock := render.HomeGeoSummaryHTML(statsLabel)
	if strings.Contains(html, render.GeoSummaryMarker) {
		html = strings.Replace(html, render.GeoSummaryMarker, geoBlock, 1)
	} else {
		html = strings.Replace(html, `<div class="page-content">`, `<div class="page-content">`+geoBlock, 1)
	}

	html = ApplySiteEnhancements(html)

	w.Header().Set("Content-Type", "text/html; charset=utf-8")
	w.Header().Set("Cache-Control", "no-store")
	_, _ = w.Write([]byte(html))
}

func applyHomeStats(html string) string {
	file, err := stats.Load(stats.DefaultPath)
	if err != nil {
		log.Printf("home stats: %v (usando valores padrão)", err)
	}
	return stats.ApplyHomeHTML(html, file, stats.DefaultFallbacks())
}

func (h *Handler) homeCNAECatalog(r *http.Request) (string, error) {
	items, err := h.leads.AllCNAEs(r.Context())
	if err != nil {
		return "", err
	}
	return render.CNAECatalogHTML(render.GroupCNAEsBySection(items))
}
