package server

import (
	"io/fs"
	"log/slog"
	"net/http"
	"time"

	"git.schreifuchs.ch/schreifuchs/schreifuchs.ch/internal/pkg/middleware"
	"git.schreifuchs.ch/schreifuchs/schreifuchs.ch/web"
)

// registerStatic registers all the static files.
func registerStatic(mux *http.ServeMux) {
	fileSystem := web.GetStaticFS()

	// we still use go's fileServer to avoid unnecessary implementation
	fileServer := middleware.Cache(time.Hour * 24)(http.FileServer(http.FS(fileSystem)))

	err := fs.WalkDir(fileSystem, ".", func(path string, d fs.DirEntry, err error) error {
		if err != nil {
			return err
		}
		if d.IsDir() {
			return nil
		}

		path = "/" + path

		slog.Debug("registered static file", "path", path)

		mux.Handle(path, fileServer)

		return nil
	})
	if err != nil {
		slog.Error("could not register static files", "err", err)
		panic(err)
	}
}
