package common

import (
	"net/http"

	"github.com/gin-gonic/gin"
)

// APIResponse strukturiert alle erfolgreichen Antworten
type APIResponse struct {
	Data    interface{} `json:"data,omitempty"`
	Message string      `json:"message,omitempty"`
}

// APIError strukturiert Fehlerantworten
type APIError struct {
	Error   string `json:"error"`
	Details string `json:"details,omitempty"`
}

// RespondSuccess sendet 200 OK mit Daten
func RespondSuccess(c *gin.Context, data interface{}) {
	c.JSON(http.StatusOK, APIResponse{
		Data: data,
	})
}

// RespondMessage sendet 200 OK mit einer Nachricht
func RespondMessage(c *gin.Context, message string) {
	c.JSON(http.StatusOK, APIResponse{
		Message: message,
	})
}

// RespondCreated sendet 201 Created mit Daten
func RespondCreated(c *gin.Context, data interface{}) {
	c.JSON(http.StatusCreated, APIResponse{
		Data: data,
	})
}

// RespondError sendet einen Fehler mit Statuscode und Nachricht
func RespondError(c *gin.Context, code int, message string, details ...string) {
	errResp := APIError{Error: message}
	if len(details) > 0 {
		errResp.Details = details[0]
	}
	c.AbortWithStatusJSON(code, errResp)
}
