package main

import (
	"encoding/base32"
	"io"
	"io/fs"
	"log"
	"strings"

	"github.com/cespare/xxhash"
	dlshtml "novit.tech/direktil/local-server/html"
)

func computeUIHash() {
	xxh := xxhash.New()

	err := fs.WalkDir(dlshtml.FS, "ui", func(path string, entry fs.DirEntry, walkErr error) (err error) {
		if walkErr != nil {
			err = walkErr
			return
		}

		if entry.IsDir() {
			return
		}

		f, err := dlshtml.FS.Open(path)
		if err != nil {
			return
		}
		defer f.Close()

		io.Copy(xxh, f)

		return nil
	})

	if err != nil {
		log.Fatal("failed to hash UI: ", err)
	}

	h := strings.ToLower(base32.HexEncoding.WithPadding(base32.NoPadding).EncodeToString(xxh.Sum(nil)))[:5]
	log.Printf("UI hash: %s", h)
	wPublicState.Change(func(v *PublicState) { v.UIHash = h })
}