//go:build e2e

package testkit

import (
	"os"
	"path/filepath"
	"testing"
)

func TestLoadConfigEmbeddedByDefault(t *testing.T) {
	clearE2EEnv(t)
	t.Setenv("AGENTTEAM_E2E_PROFILE", "")

	cfg := loadConfigFromEnv()
	if cfg.Profile != ProfileEmbedded {
		t.Fatalf("profile: got %q want %q", cfg.Profile, ProfileEmbedded)
	}
	if cfg.BaseURL != "" {
		t.Fatalf("baseURL should be empty, got %q", cfg.BaseURL)
	}
}

func TestLoadConfigRemoteFromBaseURL(t *testing.T) {
	clearE2EEnv(t)
	t.Setenv("AGENTTEAM_E2E_BASE_URL", "https://agentteam-a.example.com")
	t.Setenv("AGENTTEAM_E2E_ACCESS_TOKEN", "token-a")
	t.Setenv("AGENTTEAM_E2E_USER_B_ACCESS_TOKEN", "token-b")
	t.Setenv("AGENTTEAM_E2E_USER_B_USER_ID", "user-b-id")
	t.Setenv("AGENTTEAM_E2E_WORKSPACE_ID", "ws-1")

	cfg := loadConfigFromEnv()
	if cfg.Profile != ProfileRemote {
		t.Fatalf("profile: got %q want %q", cfg.Profile, ProfileRemote)
	}
	if cfg.BaseURL != "https://agentteam-a.example.com" {
		t.Fatalf("baseURL mismatch: %q", cfg.BaseURL)
	}
	if cfg.UserA.AccessToken != "token-a" {
		t.Fatalf("user A token mismatch")
	}
	if cfg.UserB.AccessToken != "token-b" || cfg.UserB.UserID != "user-b-id" {
		t.Fatalf("user B credentials mismatch: %+v", cfg.UserB)
	}
	if cfg.WorkspaceID != "ws-1" {
		t.Fatalf("workspace id mismatch: %q", cfg.WorkspaceID)
	}
}

func TestMergeAccountsFileOverridesEnv(t *testing.T) {
	clearE2EEnv(t)
	t.Setenv("AGENTTEAM_E2E_BASE_URL", "https://old.example.com")

	dir := t.TempDir()
	path := filepath.Join(dir, "accounts.json")
	if err := os.WriteFile(path, []byte(`{
  "baseURL": "https://agentteam-b.example.com",
  "workspaceId": "ws-file",
  "userA": { "accessToken": "a-file", "userId": "a-id" },
  "userB": { "accessToken": "b-file", "userId": "b-id" }
}`), 0o600); err != nil {
		t.Fatalf("write accounts file: %v", err)
	}

	cfg := loadConfigFromEnv()
	mergeAccountsFile(&cfg, path)

	if cfg.BaseURL != "https://agentteam-b.example.com" {
		t.Fatalf("baseURL: got %q", cfg.BaseURL)
	}
	if cfg.Profile != ProfileRemote {
		t.Fatalf("profile: got %q", cfg.Profile)
	}
	if cfg.WorkspaceID != "ws-file" {
		t.Fatalf("workspace: got %q", cfg.WorkspaceID)
	}
	if cfg.UserA.AccessToken != "a-file" || cfg.UserA.UserID != "a-id" {
		t.Fatalf("userA: %+v", cfg.UserA)
	}
	if cfg.UserB.AccessToken != "b-file" || cfg.UserB.UserID != "b-id" {
		t.Fatalf("userB: %+v", cfg.UserB)
	}
}

func clearE2EEnv(t *testing.T) {
	t.Helper()
	for _, key := range []string{
		"AGENTTEAM_E2E_PROFILE",
		"AGENTTEAM_E2E_BASE_URL",
		"AGENTTEAM_E2E_WORKSPACE_ID",
		"AGENTTEAM_E2E_ACCESS_TOKEN",
		"AGENTTEAM_E2E_USER_A_ACCESS_TOKEN",
		"AGENTTEAM_E2E_USER_A_TOKEN",
		"AGENTTEAM_E2E_USER_A_USER_ID",
		"AGENTTEAM_E2E_USER_B_ACCESS_TOKEN",
		"AGENTTEAM_E2E_USER_B_TOKEN",
		"AGENTTEAM_E2E_USER_B_USER_ID",
		"AGENTTEAM_E2E_ACCOUNTS_FILE",
	} {
		t.Setenv(key, "")
	}
}
