package public_handlers

import (
	"cpone/models"
	"cpone/utils"
	kartukontrol "cpone/views/public/kartukontrol"
	public_toast "cpone/views/public/toast"

	"github.com/a-h/templ"
	"github.com/labstack/echo/v4"
	"go.uber.org/zap"
)

type KartuKontrolService interface {
	GetkartuKontrolById(nomorRegistrasi string) ([]models.KartuKontrolModel, error)
}

func NewKartuKontrolHandler(us KartuKontrolService) *KartuKontrolHandler {
	return &KartuKontrolHandler{
		KartuKontrolService: us,
	}
}

type KartuKontrolHandler struct {
	KartuKontrolService KartuKontrolService
}

func (lh *KartuKontrolHandler) HandlerHideToast(c echo.Context) error {
	toastComponent := public_toast.PublicToastV1KartuKontrolHide()

	si := toastComponent

	return utils.View(c, si)
}

func (lh *KartuKontrolHandler) HandlerShowKartuKontrol(c echo.Context) error {

	var flagxError bool = true
	var msgx string = ""

	nomorRegistrasi := c.Param("nomorRegistrasi")

	urlSurveyMcu := "redirectsurveymcu"

	// urlSurveyMcu := "redirectsurveymcu"

	// nomorRegistrasi := "1"
	logger, _ := zap.NewProduction()
	defer logger.Sync()

	dataKartuKontrol, err := lh.KartuKontrolService.GetkartuKontrolById(nomorRegistrasi)

	if err != nil {
		logger.Info("Error",
			zap.Any("Error", err),
			zap.Any("prm", nomorRegistrasi),
		)
		// return err
		if flagxError {
			msgx = "Error Get Kartu Kontrol"
			si := public_toast.PublicToastV1KartuKontrolShow("Error", msgx, "danger")
			return utils.View(c, si)
		}
	}
	logger.Info("SHOW DATA KARTU KONTROL handler",
		zap.Any("return", dataKartuKontrol),
		zap.Any("prm", nomorRegistrasi),
	)

	flagxError = false
	var si templ.Component
	var isShowSurveyMcu bool = true

	if isShowSurveyMcu {
		si = kartukontrol.ShowKartuKontrol("Kartu Kontrol", kartukontrol.MainContentKartuKontrolLayout(dataKartuKontrol, "/modalsurveykartukontrol", "load delay:3s", "modalWordingSurveyMcu", urlSurveyMcu, nomorRegistrasi), kartukontrol.CssKartuKontrol(), kartukontrol.JsKartuKontrol())
	} else {
		si = kartukontrol.ShowKartuKontrol("Kartu Kontrol",
			kartukontrol.MainContentKartuKontrolLayout(dataKartuKontrol, "", "", "modalWordingSurveyMcu", urlSurveyMcu, nomorRegistrasi), kartukontrol.CssKartuKontrol(), kartukontrol.JsKartuKontrol())
	}

	return utils.View(c, si)
}

func (lh *KartuKontrolHandler) HandlerShowWordingModalSurveyMcu(c echo.Context) error {

	stringUrlToSurveyMcu := c.QueryParam("urlSurveyMcu")

	// var dataKartuKontrol []models.KartuKontrolModel
	si := kartukontrol.ShowKartuKontrol(
		"Kartu Kontrol",
		kartukontrol.ModalMcuWordingShow("modalWordingSurveyMcu", "Silahkan isi questioner untuk membantu peningkatan layanan kami. Terima kasih.", stringUrlToSurveyMcu), kartukontrol.CssKartuKontrol(), kartukontrol.JsKartuKontrol())

	return utils.View(c, si)
}

func (lh *KartuKontrolHandler) HandlerRedirectToSurveyMcu(c echo.Context) error {

	nomorRegistrasi := c.QueryParam("nomorRegistrasi")
	stringUrlToSurveyMcu := "/surveymcu/" + nomorRegistrasi

	logger, _ := zap.NewProduction()
	defer logger.Sync()

	if len(stringUrlToSurveyMcu) > 0 {
		// redirect ke kartu kontrol
		logger.Info("redirect SURVEY MCU",
			zap.Any("redirect SURVEY MCU", stringUrlToSurveyMcu),
		)
		c.Response().Header().Set("HX-Redirect", stringUrlToSurveyMcu)
		// return c.NoContent(http.StatusOK)
	}

	si := kartukontrol.ShowKartuKontrol(
		"Kartu Kontrol",
		kartukontrol.ModalMcuWordingShow("modalWordingSurveyMcu", "Silahkan isi questioner untuk membantu peningkatan layanan kami. Terima kasih.", ""), kartukontrol.CssKartuKontrol(), kartukontrol.JsKartuKontrol())

	return utils.View(c, si)
}
