// Path: Backend/internal/handlers/health/health.go

package health

import (
	"context"
	"time"

	"boostai-backend/internal/database"

	"github.com/gofiber/fiber/v2"
)

type Handler struct {
	environment string
	db          *database.DB
}

func NewHandler(environment string, db *database.DB) *Handler {
	return &Handler{environment: environment, db: db}
}

func (h *Handler) Check(c *fiber.Ctx) error {
	status := "healthy"
	databaseStatus := "up"
	httpStatus := fiber.StatusOK

	if h.db != nil {
		ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
		defer cancel()

		if err := h.db.Health(ctx); err != nil {
			status = "unhealthy"
			databaseStatus = "down"
			httpStatus = fiber.StatusServiceUnavailable
		}
	}

	return c.Status(httpStatus).JSON(fiber.Map{
		"status":      status,
		"service":     "boostai-backend",
		"environment": h.environment,
		"database":    databaseStatus,
		"timestamp":   time.Now().UTC().Format(time.RFC3339),
	})
}
