package session

import (
	"encoding/json"
)

type BaseResponse struct {
	Code    int    `json:"code"`
	Message string `json:"message"`
}

type CommonResponse struct {
	BaseResponse
	Data interface{} `json:"data"`
}

type RawResponse struct {
	BaseResponse
	Data json.RawMessage `json:"data"`
}

type ListResponse struct {
	BaseResponse
	Data struct {
		Total       int64       `json:"total"`
		TotalAmount string      `json:"totalAmount,omitempty"`
		Items       interface{} `json:"items"`
	} `json:"data,omitempty"`
}

var (
	rspOk *BaseResponse
)

func init() {
	rspOk = new(BaseResponse)
	rspOk.Message = "OK"
	rspOk.Code = 0
}

func NewRspOk() *BaseResponse {
	return rspOk
}

func NewRawRsp(raw []byte) *RawResponse {
	rsp := &RawResponse{
		BaseResponse: BaseResponse{
			Code:    rspOk.Code,
			Message: rspOk.Message,
		},
	}
	rsp.Data = raw
	return rsp
}
func NewListRsp(total int64, items interface{}) *ListResponse {
	rsp := &ListResponse{
		BaseResponse: BaseResponse{
			Code:    rspOk.Code,
			Message: rspOk.Message,
		},
	}
	rsp.Data.Total = total
	rsp.Data.Items = items
	return rsp
}

func NewRsp(data interface{}) *CommonResponse {
	return &CommonResponse{
		BaseResponse: BaseResponse{
			Code:    rspOk.Code,
			Message: rspOk.Message,
		},
		Data: data,
	}
}