package stats

import (
	"runtime"
	"testing"
)

func TestNewReporterSystemInfo(t *testing.T) {
	r := NewReporter()
	host, cores, memGB := r.SystemInfo()
	if host == "" {
		t.Fatal("hostname should not be empty")
	}
	if cores < 1 {
		t.Fatalf("cores %d", cores)
	}
	if memGB < 1 {
		t.Fatalf("memoryGB %d", memGB)
	}
}

func TestReporterUsage(t *testing.T) {
	r := NewReporter()
	cpu, mem := r.Usage()
	if cpu < 0 || mem < 0 || mem > 100 {
		t.Fatalf("cpu=%v mem=%v", cpu, mem)
	}
}

func TestReporterMemoryMB(t *testing.T) {
	r := NewReporter()
	total := r.TotalMemoryMB()
	free := r.FreeMemoryMB()
	if runtime.GOOS == "windows" || runtime.GOOS == "linux" || runtime.GOOS == "darwin" {
		if total == 0 {
			t.Fatal("expected non-zero total memory on supported platform")
		}
	}
	if free > total && total > 0 {
		t.Fatalf("free %d > total %d", free, total)
	}
}

func TestReporterSystemCPUPercentNonNegative(t *testing.T) {
	r := NewReporter()
	if pct := r.SystemCPUPercent(); pct < 0 {
		t.Fatalf("negative cpu percent: %v", pct)
	}
}
