package admin

import (
	"encoding/json"
	"fmt"
	"net/http"
	"runtime"

	"github.com/bjdgyc/anylink/base"
)

type Resp struct {
	Code     int         `json:"code"`
	Msg      string      `json:"msg"`
	Location string      `json:"location"`
	Data     interface{} `json:"data"`
}

func respHttp(w http.ResponseWriter, respCode int, data interface{}, errS ...interface{}) {
	resp := Resp{
		Code: respCode,
		Msg:  "success",
		Data: data,
	}
	_, file, line, _ := runtime.Caller(2)
	resp.Location = fmt.Sprintf("%v:%v", file, line)

	if respCode != 0 {
		resp.Msg = ""
		if v, ok := RespMap[respCode]; ok {
			resp.Msg += v
		}

		if len(errS) > 0 {
			resp.Msg += fmt.Sprint(errS...)
		}
	}

	b, err := json.Marshal(resp)
	if err != nil {
		base.Error(err, resp)
	}

	w.Header().Set("Content-Type", "application/json; charset=utf-8")
	w.WriteHeader(http.StatusOK)
	_, err = w.Write(b)
	if err != nil {
		base.Error(err)
	}
	// 记录返回数据
	// logger.Category("response").Debug(string(b))
}

func RespSucess(w http.ResponseWriter, data interface{}) {
	respHttp(w, 0, data, "")
}

func RespError(w http.ResponseWriter, respCode int, errS ...interface{}) {
	respHttp(w, respCode, nil, errS...)
}

func RespData(w http.ResponseWriter, data interface{}, err error) {
	respHttp(w, http.StatusOK, data, "")
}