package tenants

import (
	"os"
	"path/filepath"
	"testing"

	"github.com/stretchr/testify/assert"
)

func TestReadFileText(t *testing.T) {
	dir := t.TempDir()
	path := filepath.Join(dir, "tenants.txt")
	content := "\n# delete list\n42\n42:7\n  1001:0  \n"
	assert.NoError(t, os.WriteFile(path, []byte(content), 0o644))
	got, err := ReadFile(path)
	assert.NoError(t, err)
	want := []string{"42", "42:7", "1001:0"}
	assert.Equal(t, want, got)
}

func TestReadFileJSONObject(t *testing.T) {
	dir := t.TempDir()
	path := filepath.Join(dir, "tenants.json")
	assert.NoError(t, os.WriteFile(path, []byte(`{"tenants":[{"tenant":"42:7"},{"tenant":"1001:0"}]}`), 0o644))
	got, err := ReadFile(path)
	assert.NoError(t, err)
	assert.Len(t, got, 2)
	assert.Equal(t, "42:7", got[0])
	assert.Equal(t, "1001:0", got[1])
}

func TestReadFileJSONArray(t *testing.T) {
	dir := t.TempDir()
	path := filepath.Join(dir, "tenants.json")
	assert.NoError(t, os.WriteFile(path, []byte(`["42:7","1001:0"]`), 0o644))
	got, err := ReadFile(path)
	assert.NoError(t, err)
	assert.Len(t, got, 2)
	assert.Equal(t, "42:7", got[0])
}

func TestReadFileEmpty(t *testing.T) {
	dir := t.TempDir()
	path := filepath.Join(dir, "empty.txt")
	assert.NoError(t, os.WriteFile(path, []byte("   \n\n"), 0o644))
	got, err := ReadFile(path)
	assert.NoError(t, err)
	assert.NotNil(t, got)
	assert.Empty(t, got, "expected non-nil empty slice")
}

func TestReadFileMissing(t *testing.T) {
	_, err := ReadFile("/nonexistent/path/tenants.txt")
	assert.Error(t, err, "expected error for missing file")
}
