package report

import (
	"fmt"

	"github.com/photoprism/photoprism/pkg/clean"
)

// RenderFormat returns a text-formatted table, optionally as valid Markdown,
// so the output can be pasted into the docs.
func RenderFormat(rows [][]string, cols []string, format Format) (string, error) {
	switch format {
	case JSON:
		return JSONExport(rows, cols)
	case CSV:
		return Render(rows, cols, Options{Format: CSV})
	case TSV:
		return Render(rows, cols, Options{Format: TSV})
	case Markdown:
		return Render(rows, cols, Options{Format: Markdown, Valid: true})
	case Default:
		return Render(rows, cols, Options{Format: Default, Valid: false})
	default:
		return "", fmt.Errorf("invalid format %s", clean.Log(string(format)))
	}
}

// Render returns a text-formatted table, optionally as valid Markdown,
// so the output can be pasted into the docs.
func Render(rows [][]string, cols []string, opt Options) (string, error) {
	switch opt.Format {
	case JSON:
		return JSONExport(rows, cols)
	case CSV:
		return CsvExport(rows, cols, ';')
	case TSV:
		return CsvExport(rows, cols, '\t')
	case Markdown:
		opt.Valid = true
		return MarkdownTable(rows, cols, opt), nil
	case Default:
		opt.Valid = false
		return MarkdownTable(rows, cols, opt), nil
	default:
		return "", fmt.Errorf("invalid format %s", clean.Log(string(opt.Format)))
	}
}
