package routes

import (
	"log/slog"
	"net/http"

	"git.codemonkeysoftware.net/b/peachy-go/desktop/components"
	"git.codemonkeysoftware.net/b/peachy-go/desktop/pages"
	"github.com/go-chi/chi/v5"
	"github.com/go-chi/chi/v5/middleware"
	"github.com/go-chi/httplog/v2"
)

/*
Create a new chi router, configure it and return it.
*/
func NewChiRouter(port string) *chi.Mux {

	r := chi.NewRouter()

	logger := httplog.NewLogger("app-logger", httplog.Options{
		LogLevel: slog.LevelInfo,
		Concise:  true,
	})

	// Use the logger and recoverer middleware.
	r.Use(httplog.RequestLogger(logger))
	r.Use(middleware.Recoverer)

	/*
		// ULTRA IMPORTANT : This middleware is used to prevent caching of the pages.
		// Sometimes, HX requests may be cached by the browser, which may cause unexpected behavior.
		r.Use(func(next http.Handler) http.Handler {
			return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
				w.Header().Set("Cache-Control", "no-store")
				next.ServeHTTP(w, r)
			})
		})
	*/

	r.Handle("/static/*", http.StripPrefix("/static/", http.FileServer(http.Dir("static"))))

	r.Get("/splash", func(w http.ResponseWriter, r *http.Request) {
		slog.Info("we splashin")
		HXRender(w, r, pages.Splash)
	})

	r.Get("/", func(w http.ResponseWriter, r *http.Request) {
		slog.Info("we homies")
		HXRender(w, r, pages.HomePage)
	})

	r.Get("/hello", func(w http.ResponseWriter, r *http.Request) {
		HXRender(w, r, components.HelloWorld)
	})

	go http.ListenAndServe(":"+port, r)

	return r
}
