package printer

import (
	"fmt"
	"io"

	"github.com/tidbcloud/aisupport/packages/sdk-go/infra/utils/printer/json"
	"github.com/tidbcloud/aisupport/packages/sdk-go/infra/utils/printer/table"
)

const (
	FormatJSON  = "json"
	FormatTable = "table"
)

type Printer interface {
	PrintObject(value any) error
	PrintList(values []any) error
}

func NewPrinter(
	format string,
	output io.Writer,
) (Printer, error) {
	switch format {
	case FormatJSON:
		return json.NewJSON(output), nil
	case FormatTable:
		return table.NewTable(output), nil
	}

	return nil, fmt.Errorf("not supported format %p", &format)
}
