package main

import (
	"net/http/httptest"
	"path/filepath"
	"reflect"
	"testing"
)

func etkinTestSifirla(t *testing.T) {
	t.Helper()
	etkinMu.Lock()
	etkinDosyaOverride = filepath.Join(t.TempDir(), "etkin.json")
	etkinYuklendi = false
	etkinKume = nil
	etkinMu.Unlock()
	// Test bitince gecici yol birakilir; diger testler gercek klasoru kullanmaya devam eder.
	t.Cleanup(func() {
		etkinMu.Lock()
		etkinDosyaOverride = ""
		etkinYuklendi = false
		etkinKume = nil
		etkinMu.Unlock()
	})
}

func TestEtkinHesapEkleCikarKaliciLik(t *testing.T) {
	etkinTestSifirla(t)
	if err := etkinHesapEkle("ahmet"); err != nil {
		t.Fatal(err)
	}
	if err := etkinHesapEkle("ayse"); err != nil {
		t.Fatal(err)
	}
	if !etkinMi("ahmet") || !etkinMi("ayse") {
		t.Fatal("ekli hesaplar etkin olmali")
	}
	if err := etkinHesapCikar("ahmet"); err != nil {
		t.Fatal(err)
	}
	if etkinMi("ahmet") {
		t.Fatal("cikarilan hesap etkin olmamali")
	}
	// Diskten yeniden yukleme
	etkinMu.Lock()
	etkinYuklendi = false
	etkinKume = nil
	etkinMu.Unlock()
	if got := etkinHesaplar(); !reflect.DeepEqual(got, []string{"ayse"}) {
		t.Fatalf("kalici liste yanlis: %v", got)
	}
}

func TestEtkinHesapGecersizAnahtar(t *testing.T) {
	etkinTestSifirla(t)
	if err := etkinHesapEkle("../x"); err == nil {
		t.Fatal("gecersiz anahtar reddedilmeli")
	}
	if etkinMi("") {
		t.Fatal("bos anahtar etkin olmamali")
	}
}

func TestProfilDeBaglamVeYedek(t *testing.T) {
	r := httptest.NewRequest("GET", "/x", nil)
	if got := istekProfili(r); got != "" {
		t.Fatalf("baglam bos olmali: %q", got)
	}
	r2 := profilBaglam(r, "ayse")
	if istekProfili(r2) != "ayse" || profilDe(r2) != "ayse" {
		t.Fatal("baglamdaki profil okunamadi")
	}
}
