package http_resp

import (
	"github.com/gin-gonic/gin"
	"net/http"
)

type RespJsonData struct {
	Code int         `json:"code"`
	Msg  string      `json:"msg"`
	Data interface{} `json:"data,omitempty"`
}

func Success(data interface{}) *RespJsonData {
	return &RespJsonData{
		Code: OK.Code(),
		Msg:  OK.Error(),
		Data: data,
	}
}

func Error(code *Code) *RespJsonData {
	return &RespJsonData{
		Code: code.Code(),
		Msg:  code.Error(),
	}
}

func JsonOK(c *gin.Context, data *RespJsonData) {
	c.JSON(http.StatusOK, data)
}

func JsonBadRequest(c *gin.Context) {
	c.JSON(http.StatusBadRequest, Error(ParamError))
}

func JsonMethodNotAllowed(c *gin.Context) {
	c.JSON(http.StatusMethodNotAllowed, Error(NewCode(Failed.Code(), "Method Not Allowed")))
}

func JsonNotFound(c *gin.Context) {
	c.JSON(http.StatusNotFound, Error(NewCode(Failed.Code(), "Endpoint Not Found")))
}

func AbortUnauthorized(c *gin.Context) {
	c.AbortWithStatusJSON(http.StatusUnauthorized, Error(NewCode(Failed.Code(), "Invalid Authorization")))
}
