package usecase

import (
	"testing"

	domusecase "haixun-backend/internal/model/threads_account/domain/usecase"
)

func TestApplyConnectionPatchSearchSourceInDevMode(t *testing.T) {
	current := deriveConnectionPrefsFromDevMode(true)
	patch := domusecase.ConnectionPrefsPatch{
		SearchSourceMode: strPtr("brave"),
	}
	next := applyConnectionPatch(current, patch)
	if next.SearchSourceMode != "brave" {
		t.Fatalf("expected brave, got %s", next.SearchSourceMode)
	}
	if !next.DevMode {
		t.Fatal("expected dev mode to stay enabled")
	}
}

func TestApplyConnectionPatchSearchSourceInFormalMode(t *testing.T) {
	current := deriveConnectionPrefsFromDevMode(false)
	patch := domusecase.ConnectionPrefsPatch{
		SearchSourceMode: strPtr("threads_crawler"),
	}
	next := applyConnectionPatch(current, patch)
	if next.SearchSourceMode != "threads_crawler" {
		t.Fatalf("expected threads_crawler, got %s", next.SearchSourceMode)
	}
}

func TestNormalizeConnectionPrefsKeepsCrawlerModeInFormalMode(t *testing.T) {
	prefs := domusecase.ConnectionPrefs{
		DevMode:          false,
		SearchSourceMode: "crawler",
	}
	next := normalizeConnectionPrefs(prefs)
	if next.SearchSourceMode != "crawler" {
		t.Fatalf("expected crawler, got %s", next.SearchSourceMode)
	}
}

func strPtr(v string) *string {
	return &v
}
