package admin

import (
	"bytes"
	"encoding/json"
	"io"
	"time"
)

//Response -- Standard response structure
type Response struct {
	TransactionType      string      `json:"type"`
	Schema               string      `json:"schema"`
	TransactionTimeStamp int64       `json:"txts"`
	TransactionID        int64       `json:"txid"`
	Error                string      `json:"error"`
	ErrorDescription     string      `json:"error_description"`
	ErrorURI             string      `json:"error_uri"`
	Result               interface{} `json:"result"`
}

//NewResponse -- Constructor
func NewResponse(transactionType string) (p *Response) {
	// TODO BUG use atomic
	transactionID++

	p = &Response{}
	p.TransactionType = transactionType
	p.TransactionID = transactionID
	p.TransactionTimeStamp = time.Now().Unix()
	p.Error = "ok"

	return
}

//Generate -- encode into JSON and return string
func (e *Response) Generate() string {
	buf := new(bytes.Buffer)
	json.NewEncoder(buf).Encode(e)
	return buf.String()
}

//GenerateWriter --
func (e *Response) GenerateWriter(w io.Writer) {
	json.NewEncoder(w).Encode(e)
}