package dev_handlers

import (
	"cpone/models"
	"cpone/utils"
	dev_kesimpulan "cpone/views/dev/kesimpulan"
	"fmt"

	"github.com/labstack/echo/v4"
	"go.uber.org/zap"
)

type KesimpulanService interface {
	GetListKesimpulanLab(id string) ([]models.ModelKesimpulanLab, error)
	GetListKesimpulanNonLab(id string) ([]models.ModelKesimpulanLab, error)
	GetListKesimpulanFisik(id string) ([]models.ModelKesimpulanLab, error)
}

func NewKesimpulanHandler(us KesimpulanService) *KesimpulanHandler {
	return &KesimpulanHandler{
		KesimpulanService: us,
	}
}

type KesimpulanHandler struct {
	KesimpulanService KesimpulanService
}

func (h *KesimpulanHandler) HandleShowKesimpulanScreen(c echo.Context) error {
	logger, _ := zap.NewProduction()

	tableID := utils.GenerateRandomID("tablebody")
	id := c.Param("id")

	// table component
	dataLab, err := h.KesimpulanService.GetListKesimpulanLab(id)
	if err != nil {
		defer logger.Sync()
		logger.Info("ERROR GET LIST LAB",
			zap.Any("error", err),
		)
		fmt.Println(dataLab)
		return err
	}

	logger.Info("CEK DATA",
		zap.Any("data lab", dataLab))

	tableComponentLab := dev_kesimpulan.CardTableKesimpulan("3 Kelainan Pemeriksaan Lab terbesar :", dataLab, tableID)

	// table component non lab
	dataNonLab, err := h.KesimpulanService.GetListKesimpulanNonLab(id)
	if err != nil {
		defer logger.Sync()
		logger.Info("ERROR GET LIST NON LAB",
			zap.Any("error", err),
		)
		fmt.Println(dataNonLab)
		return err
	}

	logger.Info("CEK DATA",
		zap.Any("data lab", dataNonLab))
	tableComponentNonLab := dev_kesimpulan.CardTableKesimpulan("3 Kelainan Pemeriksaan Non Lab terbesar :", dataNonLab, tableID)

	// table component fisik
	dataFisik, err := h.KesimpulanService.GetListKesimpulanFisik(id)
	if err != nil {
		defer logger.Sync()
		logger.Info("ERROR GET LIST FISIK",
			zap.Any("error", err),
		)
		fmt.Println(dataFisik)
		return err
	}

	logger.Info("CEK DATA",
		zap.Any("data lab", dataFisik))
	tableComponentFisik := dev_kesimpulan.CardTableKesimpulan("3 Kelainan Pemeriksaan Fisik terbesar :", dataFisik, tableID)

	content := dev_kesimpulan.MainKesimpulan(tableID,
		tableComponentLab,
		tableComponentNonLab,
		tableComponentFisik)

	view := dev_kesimpulan.ShowKesimpulan("KESIMPULAN", content, dev_kesimpulan.CssKesimpulan(), dev_kesimpulan.JsKesimpulan())
	return utils.View(c, view)
}
