package main

import (
	"os/exec"
	"testing"
	"time"

	"golang.org/x/sys/windows"
)

// TestIsNesnesiKapanisiSureciOldurur: is nesnesi tutamagi kapaninca bagli surec de sonlanmalidir.
// Bridge'in cokmesi ya da guncelleme ile kapanmasi bu davranisa dayanir.
func TestIsNesnesiKapanisiSureciOldurur(t *testing.T) {
	is, err := yeniIsNesnesi()
	if err != nil {
		t.Fatalf("is nesnesi olusturulamadi: %v", err)
	}
	// Uzun sureli, konsol penceresi acmayan bir surec.
	cmd := exec.Command("ping", "-n", "60", "127.0.0.1")
	surecPenceresizGizle(cmd)
	if err := cmd.Start(); err != nil {
		_ = windows.CloseHandle(is)
		t.Fatalf("surec baslatilamadi: %v", err)
	}
	bitti := make(chan error, 1)
	go func() { bitti <- cmd.Wait() }()

	if err := surecIsNesnesineAta(is, cmd.Process.Pid); err != nil {
		_ = cmd.Process.Kill()
		_ = windows.CloseHandle(is)
		t.Fatalf("surec is nesnesine baglanamadi: %v", err)
	}

	// Tutamagi kapat: KILL_ON_JOB_CLOSE surec olmeli.
	if err := windows.CloseHandle(is); err != nil {
		t.Fatalf("is nesnesi kapatilamadi: %v", err)
	}
	select {
	case <-bitti:
		// Surec sonlandi: beklenen davranis.
	case <-time.After(10 * time.Second):
		_ = cmd.Process.Kill()
		t.Fatal("is nesnesi kapaninca surec sonlanmadi")
	}
}
