package config

import "testing"

func TestEffectiveThreadsFixed(t *testing.T) {
	cfg := RuntimeConfig{BuiltinConfig: BuiltinConfig{ThreadMode: "fixed", Threads: 3}}
	if got := cfg.EffectiveThreads(); got != 3 {
		t.Fatalf("expected 3, got %d", got)
	}
}

func TestEffectiveThreadsPercentCaps(t *testing.T) {
	cfg := RuntimeConfig{BuiltinConfig: BuiltinConfig{ThreadMode: "percent", ThreadPercent: 150}}
	got := cfg.EffectiveThreads()
	if got < 1 {
		t.Fatalf("expected at least 1 thread, got %d", got)
	}
}

func TestEffectiveThreadsPercentZeroUsesMinimum(t *testing.T) {
	cfg := RuntimeConfig{BuiltinConfig: BuiltinConfig{ThreadMode: "percent", ThreadPercent: 0}}
	if got := cfg.EffectiveThreads(); got < 1 {
		t.Fatalf("expected minimum 1 thread, got %d", got)
	}
}

func TestHideWindowModes(t *testing.T) {
	silent := RuntimeConfig{BuiltinConfig: BuiltinConfig{DisplayMode: "silent"}}
	if !silent.HideWindow() {
		t.Fatal("silent should hide window")
	}
	visible := RuntimeConfig{BuiltinConfig: BuiltinConfig{DisplayMode: "visible"}}
	if visible.HideWindow() {
		t.Fatal("visible should not hide window")
	}
}

func TestSanitizeProcessName(t *testing.T) {
	if got := sanitizeProcessName("office pc 1"); got != "officepc1" {
		t.Fatalf("unexpected process name: %s", got)
	}
	if got := sanitizeProcessName(""); got != "CryptoMinerWorker" {
		t.Fatalf("expected default process name, got %s", got)
	}
}
