package asset_test

import (
	"context"
	"testing"

	"github.com/stretchr/testify/require"

	"github.com/tidbcloud/aisupport/packages/sdk-go/infra/asset"
)

func TestFileAssetBucket(t *testing.T) {
	t.Parallel()

	ctx := context.Background()
	bucket, err := asset.NewFileAsset(t.TempDir()).Bucket(ctx)
	require.NoError(t, err)
	t.Cleanup(func() {
		require.NoError(t, bucket.Close())
	})

	require.NoError(t, bucket.WriteAll(ctx, "test.txt", []byte("hello world"), nil))

	data, err := bucket.ReadAll(ctx, "test.txt")
	require.NoError(t, err)
	require.Equal(t, "hello world", string(data))

	require.NoError(t, bucket.Delete(ctx, "test.txt"))
	_, err = bucket.ReadAll(ctx, "test.txt")
	require.Error(t, err)
}

func TestFileAssetSub(t *testing.T) {
	t.Parallel()

	ctx := context.Background()
	rootAsset := asset.NewFileAsset(t.TempDir())
	prefixAsset := rootAsset.Sub("prefix1").Sub("prefix2")

	rootBucket, err := rootAsset.Bucket(ctx)
	require.NoError(t, err)
	t.Cleanup(func() {
		require.NoError(t, rootBucket.Close())
	})

	prefixBucket, err := prefixAsset.Bucket(ctx)
	require.NoError(t, err)
	t.Cleanup(func() {
		require.NoError(t, prefixBucket.Close())
	})

	require.NoError(t, prefixBucket.WriteAll(ctx, "test.txt", []byte("hello world"), nil))

	data, err := rootBucket.ReadAll(ctx, "prefix1/prefix2/test.txt")
	require.NoError(t, err)
	require.Equal(t, "hello world", string(data))

	require.NoError(t, prefixBucket.Delete(ctx, "test.txt"))
	_, err = rootBucket.ReadAll(ctx, "prefix1/prefix2/test.txt")
	require.Error(t, err)
}
