package utils

import (
	"net/url"
	"testing"

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

func TestStripURIQuery(t *testing.T) {
	out, err := StripURIQuery("s3://bucket/prefix/db.t1.*.csv?access-key=AKIA&secret-access-key=SECRET")
	require.NoError(t, err)
	require.Equal(t, "s3://bucket/prefix/db.t1.*.csv", out)

	out, err = StripURIQuery("")
	require.NoError(t, err)
	require.Equal(t, "", out)
}

func TestMergeURIQueryFromSource(t *testing.T) {
	source := "s3://bucket/prefix/?access-key=AKIA&secret-access-key=SECRET&external-id=1"
	wildcard := "s3://bucket/prefix/db.t1.*.csv"

	out, err := MergeURIQueryFromSource(source, wildcard)
	require.NoError(t, err)
	u, err := url.Parse(out)
	require.NoError(t, err)
	require.Equal(t, "AKIA", u.Query().Get("access-key"))
	require.Equal(t, "SECRET", u.Query().Get("secret-access-key"))
	require.Equal(t, "1", u.Query().Get("external-id"))
	require.Equal(t, "/prefix/db.t1.*.csv", u.Path)
}

func TestMergeURIQueryFromSourcePreservesRawQuery(t *testing.T) {
	source := "https://example.blob.core.windows.net/container?sig=a%2Bb&sp=racwdl&se=2026-06-05T00%3A00%3A00Z&dup=1&dup=2"
	resource := "https://example.blob.core.windows.net/container/file.csv?ignored=1#fragment"

	out, err := MergeURIQueryFromSource(source, resource)
	require.NoError(t, err)

	u, err := url.Parse(out)
	require.NoError(t, err)
	require.Equal(t, "sig=a%2Bb&sp=racwdl&se=2026-06-05T00%3A00%3A00Z&dup=1&dup=2", u.RawQuery)
	require.Empty(t, u.Fragment)
}
