package layouts

import (
	"context"
	"fmt"
	"io"
	"log/slog"
	"net/http"

	"git.schreifuchs.ch/schreifuchs/schreifuchs.ch/internal/pkg/config"
	"git.schreifuchs.ch/schreifuchs/schreifuchs.ch/internal/pkg/templer"
	"github.com/a-h/templ"
)

type Layouts struct {
	cfg config.Cfg
}

func New(cfg config.Cfg) *Layouts {
	return &Layouts{
		cfg: cfg,
	}
}

// Render renders a page. If the query paramenter "c" is set
// the component gets rendered without the layout
func (l *Layouts) Render(ctx context.Context, w io.Writer, r *http.Request, component templ.Component) {
	withLayout := !r.URL.Query().Has("c")
	fmt.Println("layout: ", withLayout)

	title := templer.GetTitle(ctx, "Schreifuchs")

	slog.Debug("HX-Request", "value", r.Header.Get("HX-Request"))
	if r.Header.Get("HX-Request") != "true" {
		ctx = templ.WithChildren(ctx, component)
		component = Base(l.cfg, title)
	} else {
		ctx = templ.WithChildren(ctx, component)
		component = Head(l.cfg, title)
	}

	if err := component.Render(ctx, w); err != nil {
		slog.Error("error while rendering component", "err", err, "ctx", ctx)
	}
}
