package main

import (
	"path/filepath"
	"testing"
)

// etkinTestKur: testte etkin hesap kumesini gecici bir dosyaya kurar (gercek kullanici klasorune yazmaz).
// Test bitince onceki durum geri yuklenir; boylece sonraki testler bu gecici yola bakmaz.
func etkinTestKur(t *testing.T, hesaplar ...string) {
	t.Helper()
	etkinMu.Lock()
	eskiOverride, eskiKume, eskiYuklendi := etkinDosyaOverride, etkinKume, etkinYuklendi
	etkinDosyaOverride = filepath.Join(t.TempDir(), "etkin.json")
	etkinKume = nil
	etkinYuklendi = false
	etkinMu.Unlock()
	t.Cleanup(func() {
		etkinMu.Lock()
		defer etkinMu.Unlock()
		etkinDosyaOverride, etkinKume, etkinYuklendi = eskiOverride, eskiKume, eskiYuklendi
	})
	for _, h := range hesaplar {
		if err := etkinHesapEkle(h); err != nil {
			t.Fatalf("etkinHesapEkle(%q): %v", h, err)
		}
	}
}

// TestSokOlayIzinli: handshake her profilde serbest; diger komutlar yalnizca etkin hesabin
// kendi soketinden kabul edilir. Etkin olmayan hesabin komutu yok sayilir.
func TestSokOlayIzinli(t *testing.T) {
	etkinTestKur(t, "ahmet", "ayse")
	cases := []struct {
		olay, profil string
		want         bool
	}{
		{"FikoYT.bridge.cihaz.hazir.ok", "ahmet", true},
		{"FikoYT.bridge.cihaz.hazir.hata", "kapali", true},
		{"FikoYT.bridge.eklenti.istegi", "ahmet", true},
		{"FikoYT.bridge.eklenti.istegi", "ayse", true},
		{"FikoYT.bridge.surec.istegi", "ayse", true},
		{"FikoYT.bridge.guncelle.istegi", "ahmet", true},
		{"FikoYT.bridge.cihaz.kaldirildi", "ahmet", true},
		{"FikoYT.bridge.eklenti.istegi", "kapali", false},
		{"FikoYT.bridge.eklenti.istegi", "", false},
	}
	for _, c := range cases {
		if got := sokOlayIzinli(c.olay, c.profil); got != c.want {
			t.Errorf("sokOlayIzinli(%q, %q) = %v, istenen %v", c.olay, c.profil, got, c.want)
		}
	}
}
