package render
import (
	"html/template"
	"net/http"
	v1 "management/internal/erpserver/service/v1"
	"management/internal/pkg/render/util"
	"management/internal/pkg/session"
)
type Render interface {
	htmlRender
	jsonRender
}
type htmlRender interface {
	HTML(w http.ResponseWriter, req *http.Request, name string, data map[string]any)
}
type jsonRender interface {
	JSON(w http.ResponseWriter, data any)
	JSONObj(w http.ResponseWriter, message string, data any)
	JSONOk(w http.ResponseWriter, message string)
	JSONErr(w http.ResponseWriter, message string)
}
type render struct {
	templateConfig *TemplateConfig
	templates      map[string]*template.Template
	session        session.Manager
	menuService v1.MenuService
}
func New(session session.Manager, menuService v1.MenuService) (Render, error) {
	r := &render{
		templateConfig: &TemplateConfig{
			Root:      ".",
			Extension: ".tmpl",
			Layout:    "base",
			Partial:   "partial",
		},
		session:     session,
		menuService: menuService,
	}
	var err error
	r.templates, err = util.CreateTemplateCache(
		r.templateConfig.Root,
		r.templateConfig.Layout,
		r.templateConfig.Partial,
		r.templateConfig.Extension,
	)
	if err != nil {
		return nil, err
	}
	return r, nil
}