package scoring

import (
	"github.com/gofiber/fiber/v2"
	"github.com/google/uuid"
)

type Handler struct {
	Service Service
}

func NewHandler(service Service) *Handler {
	return &Handler{Service: service}
}

// CalculateScore godoc
// @Summary Calculate Psychotest Score
// @Description Calculates the test score for a candidate based on session ID and scoring rules
// @Tags scoring
// @Accept json
// @Produce json
// @Param sessionId path string true "Session ID"
// @Success 200 {object} map[string]interface{}
// @Router /api/v1/scoring/{sessionId}/calculate [post]
func (h *Handler) CalculateScore(c *fiber.Ctx) error {
	sessionIDStr := c.Params("sessionId")
	sessionID, err := uuid.Parse(sessionIDStr)
	if err != nil {
		return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
			"success": false,
			"error":   "invalid session ID format",
		})
	}

	result, err := h.Service.Calculate(c.Context(), sessionID)
	if err != nil {
		return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
			"success": false,
			"error":   err.Error(),
		})
	}

	return c.Status(fiber.StatusOK).JSON(fiber.Map{
		"success": true,
		"message": "Scoring calculation successful",
		"data":    result,
	})
}
