package main

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

type CSV interface {
	CSV() []byte
}

func render(c *gin.Context, status int, response any, contentType *string) {
	value := c.GetHeader("accept")
	if contentType != nil {
		switch *contentType {
		case "xml":
			value = "text/xml"
		case "json":
			value = "application/json"
		case "csv":
			value = "text/csv"
		}
	}
	switch value {
	case "text/csv":
		if csvResponse, ok := response.(CSV); ok {
			c.Data(200, value+"; charset=utf-8", csvResponse.CSV())
		} else {
			c.Header("content-type", "application/json; charset=utf-8")
			c.JSON(status, response)
		}
	case "application/xml":
		fallthrough
	case "text/xml":
		c.Header("content-type", value+"; charset=utf-8; header=present;")
		c.XML(status, response)
	case "application/json":
		fallthrough
	default:
		c.Header("content-type", "application/json; charset=utf-8")
		c.JSON(status, response)
	}
}
