package utils

import (
	"net/url"
)

// StripURIQuery removes query and fragment from a storage URI. Used when persisting
// import-into subtask paths so credentials stay only on ImportIntoTask.SourceURI.
func StripURIQuery(uri string) (string, error) {
	if uri == "" {
		return "", nil
	}
	u, err := url.Parse(uri)
	if err != nil {
		return "", err
	}
	u.RawQuery = ""
	u.Fragment = ""
	return u.String(), nil
}

// MergeURIQueryFromSource attaches credential query parameters from sourceURI onto
// resourceURI (path-only wildcard/schema path). Source query wins when present.
func MergeURIQueryFromSource(sourceURI, resourceURI string) (string, error) {
	if resourceURI == "" {
		return "", nil
	}
	resourceURL, err := url.Parse(resourceURI)
	if err != nil {
		return "", err
	}
	if sourceURI == "" {
		return resourceURL.String(), nil
	}
	sourceURL, err := url.Parse(sourceURI)
	if err != nil {
		return "", err
	}
	if sourceURL.RawQuery != "" {
		resourceURL.RawQuery = sourceURL.RawQuery
	}
	resourceURL.Fragment = ""
	return resourceURL.String(), nil
}
