package integration

import (
	"os"
	"testing"

	"github.com/k-capehart/go-salesforce/v3"
)

const (
	// Default test server URL - can be overridden with NEXUSCRM_URL env var
	defaultBaseURL = "http://127.0.0.1:3001"
)

// Account struct for testing single record operations
type Account struct {
	Id   string `json:"Id,omitempty"`
	Name string `json:"Name"`
}

// Contact struct for testing
type Contact struct {
	Id        string `json:"Id,omitempty"`
	FirstName string `json:"FirstName"`
	LastName  string `json:"LastName"`
	Email     string `json:"Email,omitempty"`
	AccountId string `json:"AccountId,omitempty"`
}

// GetBaseURL returns the base URL for testing, allowing override via env var
func GetBaseURL() string {
	if url := os.Getenv("NEXUSCRM_URL"); url != "" {
		return url
	}
	if url := os.Getenv("API_BASE_URL"); url != "" {
		return url
	}
	return defaultBaseURL
}

// newGoSFClient creates a go-salesforce client configured for NexusCRM
func newGoSFClient(t *testing.T) *salesforce.Salesforce {
	t.Helper()

	baseURL := GetBaseURL()

	// Use Client Credentials flow with Connected App
	sf, err := salesforce.Init(salesforce.Creds{
		Domain:         baseURL,
		ConsumerKey:    "test-gosf-client",     // Connected App consumer key
		ConsumerSecret: "test-gosf-secret-123", // Connected App consumer secret
	})

	if err != nil {
		t.Skipf("Could not connect to NexusCRM via go-salesforce: %v", err)
	}

	return sf
}
