package config

import "testing"

func TestLoadDefaults(t *testing.T) {
	t.Setenv("APP_ENV", "")
	t.Setenv("HTTP_ADDR", "")
	t.Setenv("PROTO_SOCKET_PATH", "")
	t.Setenv("PROTO_SOCKET_HEARTBEAT_SEC", "")
	t.Setenv("PROTO_SOCKET_HEARTBEAT_WAIT_SEC", "")
	t.Setenv("FORGEJO_WEBHOOK_SECRET", "")

	cfg := Load()
	if cfg.AppEnv != "local" {
		t.Fatalf("AppEnv: got %q, want local", cfg.AppEnv)
	}
	if cfg.HTTPAddr != ":8080" {
		t.Fatalf("HTTPAddr: got %q, want :8080", cfg.HTTPAddr)
	}
	if cfg.ProtoSocketPath != "/proto-socket" {
		t.Fatalf("ProtoSocketPath: got %q, want /proto-socket", cfg.ProtoSocketPath)
	}
	if cfg.ProtoSocketHeartbeatSec != 30 {
		t.Fatalf("ProtoSocketHeartbeatSec: got %d, want 30", cfg.ProtoSocketHeartbeatSec)
	}
	if cfg.ProtoSocketHeartbeatWait != 10 {
		t.Fatalf("ProtoSocketHeartbeatWait: got %d, want 10", cfg.ProtoSocketHeartbeatWait)
	}
	if cfg.ForgejoWebhookSecret != "" {
		t.Fatalf("ForgejoWebhookSecret should default empty")
	}
	if !cfg.WorkerEnabled {
		t.Fatal("WorkerEnabled default should be true")
	}
}

func TestLoadEnvOverrides(t *testing.T) {
	t.Setenv("APP_ENV", "test")
	t.Setenv("HTTP_ADDR", ":18080")
	t.Setenv("PROTO_SOCKET_PATH", "/gito")
	t.Setenv("PROTO_SOCKET_HEARTBEAT_SEC", "5")
	t.Setenv("PROTO_SOCKET_HEARTBEAT_WAIT_SEC", "2")
	t.Setenv("FORGEJO_WEBHOOK_SECRET", "secret-ref-value")
	t.Setenv("WORKER_ENABLED", "false")

	cfg := Load()
	if cfg.AppEnv != "test" || cfg.HTTPAddr != ":18080" {
		t.Fatalf("unexpected config: %+v", cfg)
	}
	if cfg.ProtoSocketPath != "/gito" {
		t.Fatalf("ProtoSocketPath: got %q", cfg.ProtoSocketPath)
	}
	if cfg.ProtoSocketHeartbeatSec != 5 || cfg.ProtoSocketHeartbeatWait != 2 {
		t.Fatalf("unexpected proto-socket heartbeat config: %+v", cfg)
	}
	if cfg.ForgejoWebhookSecret != "secret-ref-value" {
		t.Fatalf("ForgejoWebhookSecret: got %q", cfg.ForgejoWebhookSecret)
	}
	if cfg.WorkerEnabled {
		t.Fatal("WorkerEnabled should be false")
	}
}
