package handlers

import (
	"github.com/SamuelTariku/FortuneBet-Backend/internal/domain"
	"github.com/gofiber/fiber/v2"
)

// @Summary Get supported currencies
// @Description Returns list of supported currencies
// @Tags Multi-Currency
// @Produce json
// @Success 200 {object} domain.Response{data=[]domain.Currency}
// @Router /api/v1/currencies [get]
func (h *Handler) GetSupportedCurrencies(c *fiber.Ctx) error {
	currencies, err := h.currSvc.GetSupportedCurrencies(c.Context())
	if err != nil {
		return domain.UnExpectedErrorResponse(c)
	}

	return c.Status(fiber.StatusOK).JSON(domain.Response{
		Success:    true,
		Message:    "Supported currencies retrieved successfully",
		Data:       currencies,
		StatusCode: fiber.StatusOK,
	})
}

// @Summary Convert currency
// @Description Converts amount from one currency to another
// @Tags Multi-Currency
// @Produce json
// @Param from query string true "Source currency code (e.g., USD)"
// @Param to query string true "Target currency code (e.g., ETB)"
// @Param amount query number true "Amount to convert"
// @Success 200 {object} domain.Response{data=float64}
// @Failure 400 {object} domain.ErrorResponse
// @Router /api/v1/currencies/convert [get]
func (h *Handler) ConvertCurrency(c *fiber.Ctx) error {
	from := domain.IntCurrency(c.Query("from"))
	to := domain.IntCurrency(c.Query("to"))
	amount := c.QueryFloat("amount", 0)
	// if err != nil {
	// 	return domain.BadRequestResponse(c)
	// }

	converted, err := h.currSvc.Convert(c.Context(), amount, from, to)
	if err != nil {
		return domain.UnExpectedErrorResponse(c)
	}

	return c.Status(fiber.StatusOK).JSON(domain.Response{
		Success:    true,
		Message:    "Currency converted successfully",
		Data:       converted,
		StatusCode: fiber.StatusOK,
	})
}
