package admin

import (
	"git.dmitriygnatenko.ru/dima/go-common/logger"
	"github.com/gofiber/fiber/v2"

	customErrors "git.dmitriygnatenko.ru/dima/dmitriygnatenko-v2/internal/helper/errors"
	"git.dmitriygnatenko.ru/dima/dmitriygnatenko-v2/internal/mapper"
	"git.dmitriygnatenko.ru/dima/dmitriygnatenko-v2/internal/service/i18n"
)

type tagListPage struct {
	tagRepository TagRepository
}

func NewTagListPageHandler(
	tagRepository TagRepository,
) fiber.Handler {
	h := tagListPage{
		tagRepository: tagRepository,
	}

	return h.handler()
}

func (h tagListPage) handler() fiber.Handler {
	return func(fctx *fiber.Ctx) error {
		lang := i18n.LanguageFromContext(fctx)

		tags, err := h.tagRepository.GetAll(fctx.Context())
		if err != nil {
			logger.Error(fctx.Context(), customErrors.Wrap(err, "tags list page: can't get tags").Error())
			return err
		}

		return fctx.Render("admin/tag", fiber.Map{
			"lang":    lang,
			"section": "tag",
			"tags":    mapper.ToTagsList(tags),
		}, "admin/_layout")
	}
}
