package response

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

type ErrorResponse struct {
	Error   string `json:"error"`
	Code    string `json:"code,omitempty"`
	Details any    `json:"details,omitempty"`
}

func Error(c *fiber.Ctx, status int, code, message string) error {
	return ErrorWithDetails(c, status, code, message, nil)
}

func ErrorWithDetails(c *fiber.Ctx, status int, code, message string, details any) error {
	resp := ErrorResponse{
		Error:   message,
		Code:    code,
		Details: details,
	}

	return c.Status(status).JSON(resp)
}

func StatusCode(status int) string {
	switch status {
	case fiber.StatusBadRequest:
		return "bad_request"
	case fiber.StatusUnauthorized:
		return "invalid_session"
	case fiber.StatusForbidden:
		return "forbidden"
	case fiber.StatusNotFound:
		return "not_found"
	case fiber.StatusConflict:
		return "conflict"
	case fiber.StatusTooManyRequests:
		return "rate_limited"
	case fiber.StatusServiceUnavailable:
		return "service_unavailable"
	default:
		return "internal_error"
	}
}
