package tests

import (
	"testing"
	"time"

	"quyun/v2/providers/storage"

	. "github.com/smartystreets/goconvey/convey"
)

func TestStorageProvider(t *testing.T) {
	Convey("Storage Provider Test", t, func() {
		// Mock Config to match what we expect in config.toml
		// We use a map to simulate how unmarshal might see it, or just use the Config struct directly if we can manual init.
		// But provider uses UnmarshalConfig.

		// To test properly, we should try to boot the provider or check the logic.
		// Let's manually init the Storage struct with the config we expect to be loaded.

		cfg := &storage.Config{
			Type:      "local",
			LocalPath: "./storage",
			Secret:    "your-storage-secret",
			BaseURL:   "http://localhost:8080/v1/storage",
		}

		s := &storage.Storage{Config: cfg}

		Convey("SignURL should return absolute URL with BaseURL", func() {
			key := "test.png"
			url, err := s.SignURL("GET", key, 1*time.Hour)
			So(err, ShouldBeNil)

			// Log for debugging
			t.Logf("Generated URL: %s", url)

			So(url, ShouldStartWith, "http://localhost:8080/v1/storage/test.png")
			So(url, ShouldContainSubstring, "sign=")
		})
	})
}

// Helper to test if config loading actually works (integration test)
func TestStorageConfigLoading(t *testing.T) {
	// This requires setting up the atom container/config loader which is complex in unit test without full boot.
	// But we can check if `Provide` works with a mock config source if possible.
	// For now, we trust the logic that if Config is loaded, SignURL works.
	// The previous issue was likely Config NOT loaded or loaded empty.
}
