//go:build unit

package service

import (
	"testing"

	"github.com/stretchr/testify/require"
)

func TestGetWebSearchEmulationMode_Enabled(t *testing.T) {
	a := &Account{
		Platform: PlatformAnthropic,
		Type:     AccountTypeAPIKey,
		Extra:    map[string]any{featureKeyWebSearchEmulation: "enabled"},
	}
	require.Equal(t, WebSearchModeEnabled, a.GetWebSearchEmulationMode())
}

func TestGetWebSearchEmulationMode_Disabled(t *testing.T) {
	a := &Account{
		Platform: PlatformAnthropic,
		Type:     AccountTypeAPIKey,
		Extra:    map[string]any{featureKeyWebSearchEmulation: "disabled"},
	}
	require.Equal(t, WebSearchModeDisabled, a.GetWebSearchEmulationMode())
}

func TestGetWebSearchEmulationMode_Default(t *testing.T) {
	a := &Account{
		Platform: PlatformAnthropic,
		Type:     AccountTypeAPIKey,
		Extra:    map[string]any{featureKeyWebSearchEmulation: "default"},
	}
	require.Equal(t, WebSearchModeDefault, a.GetWebSearchEmulationMode())
}

func TestGetWebSearchEmulationMode_UnknownString(t *testing.T) {
	a := &Account{
		Platform: PlatformAnthropic,
		Type:     AccountTypeAPIKey,
		Extra:    map[string]any{featureKeyWebSearchEmulation: "unknown"},
	}
	require.Equal(t, WebSearchModeDefault, a.GetWebSearchEmulationMode())
}

func TestGetWebSearchEmulationMode_OldBoolTrue(t *testing.T) {
	a := &Account{
		Platform: PlatformAnthropic,
		Type:     AccountTypeAPIKey,
		Extra:    map[string]any{featureKeyWebSearchEmulation: true},
	}
	// bool is not a string, type assertion fails → default
	require.Equal(t, WebSearchModeDefault, a.GetWebSearchEmulationMode())
}

func TestGetWebSearchEmulationMode_OldBoolFalse(t *testing.T) {
	a := &Account{
		Platform: PlatformAnthropic,
		Type:     AccountTypeAPIKey,
		Extra:    map[string]any{featureKeyWebSearchEmulation: false},
	}
	require.Equal(t, WebSearchModeDefault, a.GetWebSearchEmulationMode())
}

func TestGetWebSearchEmulationMode_NilAccount(t *testing.T) {
	var a *Account
	require.Equal(t, WebSearchModeDefault, a.GetWebSearchEmulationMode())
}

func TestGetWebSearchEmulationMode_NilExtra(t *testing.T) {
	a := &Account{
		Platform: PlatformAnthropic,
		Type:     AccountTypeAPIKey,
		Extra:    nil,
	}
	require.Equal(t, WebSearchModeDefault, a.GetWebSearchEmulationMode())
}

func TestGetWebSearchEmulationMode_MissingField(t *testing.T) {
	a := &Account{
		Platform: PlatformAnthropic,
		Type:     AccountTypeAPIKey,
		Extra:    map[string]any{},
	}
	require.Equal(t, WebSearchModeDefault, a.GetWebSearchEmulationMode())
}

func TestGetWebSearchEmulationMode_NonAnthropicPlatform(t *testing.T) {
	a := &Account{
		Platform: PlatformOpenAI,
		Type:     AccountTypeAPIKey,
		Extra:    map[string]any{featureKeyWebSearchEmulation: "enabled"},
	}
	require.Equal(t, WebSearchModeDefault, a.GetWebSearchEmulationMode())
}

func TestGetWebSearchEmulationMode_NonAPIKeyType(t *testing.T) {
	a := &Account{
		Platform: PlatformAnthropic,
		Type:     AccountTypeOAuth,
		Extra:    map[string]any{featureKeyWebSearchEmulation: "enabled"},
	}
	require.Equal(t, WebSearchModeDefault, a.GetWebSearchEmulationMode())
}
