package machinetemplate

import (
	"bytes"
	"context"
	"encoding/csv"
	"io"

	"k8s.io/apimachinery/pkg/runtime"
	"k8s.io/apimachinery/pkg/runtime/schema"
)

type Stream struct {
	buf         *bytes.Buffer
	csvWriter   *csv.Writer
	bufItemSize int
}

func New(bufSize int) (*Stream, error) {
	buf := &bytes.Buffer{}
	csvWriter := csv.NewWriter(buf)
	err := csvWriter.Write(getHeader())
	csvWriter.Flush()
	if err != nil {
		return nil, err
	}
	return &Stream{
		buf:         buf,
		csvWriter:   csvWriter,
		bufItemSize: bufSize,
	}, nil
}

func (stream *Stream) GetObjectKind() schema.ObjectKind {
	return schema.EmptyObjectKind
}
func (stream *Stream) DeepCopyObject() runtime.Object {
	panic("rest.LocationStreamer does not implement DeepCopyObject")
}

func (stream *Stream) InputStream(ctx context.Context, apiVersion, acceptHeader string) (io.ReadCloser, bool, string, error) {
	return stream, true, "text/csv", nil
}

func (stream *Stream) Close() error {
	return nil
}

func (stream *Stream) Read(p []byte) (int, error) {
	return stream.buf.Read(p)
}

func getHeader() []string {
	return []string{"name", "nic", "az", "rack", "purpose"}
}
