package profile

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

func TestDetectRuntimeDefaults_CodexIncludesModelAndReasoningEffort(t *testing.T) {
	home := t.TempDir()
	t.Setenv("HOME", home)

	codexDir := filepath.Join(home, ".codex")
	if err := os.MkdirAll(codexDir, 0755); err != nil {
		t.Fatal(err)
	}
	config := `
model = "gpt-5.4"
model_reasoning_effort = "xhigh"
`
	if err := os.WriteFile(filepath.Join(codexDir, "config.toml"), []byte(config), 0644); err != nil {
		t.Fatal(err)
	}

	defaults := DetectRuntimeDefaults([]string{"codex", "unknown"})
	if got := defaults["codex"].Model; got != "gpt-5.4" {
		t.Fatalf("codex default model = %q, want %q", got, "gpt-5.4")
	}
	if got := defaults["codex"].ReasoningEffort; got != "xhigh" {
		t.Fatalf("codex default reasoning = %q, want %q", got, "xhigh")
	}
	if got := defaults["unknown"].Model; got != "" {
		t.Fatalf("unknown default model = %q, want empty", got)
	}
	if got := defaults["unknown"].ReasoningEffort; got != "" {
		t.Fatalf("unknown default reasoning = %q, want empty", got)
	}
}

func TestDetectRuntimeDefaults_ClaudeDoesNotSetModelDefault(t *testing.T) {
	defaults := DetectRuntimeDefaults([]string{"claude"})
	if got := defaults["claude"].Model; got != "" {
		t.Fatalf("claude default model = %q, want empty", got)
	}
	if got := defaults["claude"].ReasoningEffort; got != "" {
		t.Fatalf("claude default reasoning = %q, want empty", got)
	}
}

func TestDetectRuntimeDefaults_OpenCodeUsesConfiguredModel(t *testing.T) {
	home := t.TempDir()
	t.Setenv("HOME", home)

	opencodeDir := filepath.Join(home, ".config", "opencode")
	if err := os.MkdirAll(opencodeDir, 0755); err != nil {
		t.Fatal(err)
	}
	config := `
{
  "model": "openai/gpt-5"
}
`
	if err := os.WriteFile(filepath.Join(opencodeDir, "opencode.json"), []byte(config), 0644); err != nil {
		t.Fatal(err)
	}

	defaults := DetectRuntimeDefaults([]string{"opencode"})
	if got := defaults["opencode"].Model; got != "openai/gpt-5" {
		t.Fatalf("opencode default model = %q, want %q", got, "openai/gpt-5")
	}
}
