package planmeta

import (
	"encoding/base64"
	"encoding/hex"
	"testing"

	"github.com/golang/snappy"
	"github.com/stretchr/testify/assert"
	"github.com/stretchr/testify/require"
)

func TestResolvePlanText_PreferNormalized(t *testing.T) {
	got, err := ResolvePlanText("\tPoint_Get\troot\t", "ignored")
	require.NoError(t, err)
	assert.Equal(t, "\tPoint_Get\troot\t", got)
}

func TestResolvePlanText_Empty(t *testing.T) {
	got, err := ResolvePlanText("", "")
	require.NoError(t, err)
	assert.Equal(t, "", got)

	got, err = ResolvePlanText("   ", "")
	require.NoError(t, err)
	assert.Equal(t, "", got)
}

func TestResolvePlanText_DecodeEncodedGarbage(t *testing.T) {
	raw := []byte("not-a-real-plan")
	encoded := base64.StdEncoding.EncodeToString(snappy.Encode(nil, raw))

	_, err := ResolvePlanText("", encoded)
	require.Error(t, err)
}

func TestDecodeEncodedNormalizedPlan_InvalidBase64(t *testing.T) {
	_, err := DecodeEncodedNormalizedPlan("not!!base64")
	require.Error(t, err)
}

func TestDecodeEncodedNormalizedPlan_HexOfSnappyGarbage(t *testing.T) {
	raw := []byte("not-a-real-plan")
	compressed := snappy.Encode(nil, raw)
	hexPayload := hex.EncodeToString(compressed)

	_, err := DecodeEncodedNormalizedPlan(hexPayload)
	require.Error(t, err)
}

func TestLooksLikeHex(t *testing.T) {
	assert.True(t, looksLikeHex("6C524D34"))
	assert.False(t, looksLikeHex("6C524D3"))
	assert.False(t, looksLikeHex("not-hex"))
}
