package textfile

import (
	"bytes"
	"encoding/hex"
	"testing"

	"github.com/restic/restic/internal/fs"
)

func writeTempfile(t testing.TB, data []byte) (fs.File, func()) {
	f, removeTempfile := fs.TestTempFile(t, "restic-test-textfile-read-")

	_, err := f.Write(data)
	if err != nil {
		t.Fatal(err)
	}

	err = f.Close()
	if err != nil {
		t.Fatal(err)
	}

	return f, removeTempfile
}

func dec(s string) []byte {
	data, err := hex.DecodeString(s)
	if err != nil {
		panic(err)
	}
	return data
}

func TestRead(t *testing.T) {
	var tests = []struct {
		data []byte
		want []byte
	}{
		{data: []byte("foo bar baz")},
		{data: []byte("Ööbär")},
		{
			data: []byte("\xef\xbb\xbffööbär"),
			want: []byte("fööbär"),
		},
		{
			data: dec("feff006600f600f6006200e40072"),
			want: []byte("fööbär"),
		},
		{
			data: dec("fffe6600f600f6006200e4007200"),
			want: []byte("fööbär"),
		},
	}

	for _, test := range tests {
		t.Run("", func(t *testing.T) {
			want := test.want
			if want == nil {
				want = test.data
			}

			f, cleanup := writeTempfile(t, test.data)
			defer cleanup()

			data, err := Read(f.Name())
			if err != nil {
				t.Fatal(err)
			}

			if !bytes.Equal(want, data) {
				t.Errorf("invalid data returned, want:\n  %q\ngot:\n  %q", want, data)
			}
		})
	}
}