package main

import (
	"os"
	"path/filepath"
	"testing"
)

// TestProfilListesi: oturumu olan profiller listelenir; oturumu olmayan profil listelenmez.
func TestProfilListesi(t *testing.T) {
	t.Setenv("APPDATA", t.TempDir())

	for _, a := range []string{"ahmet", "ayse"} {
		d, err := profilKlasoru(a)
		if err != nil {
			t.Fatal(err)
		}
		icerik := `{"kullaniciAdi":"` + a + `","cerezler":[{"Name":"s","Value":"x"}]}`
		if err := os.WriteFile(filepath.Join(d, "oturum.json"), []byte(icerik), 0o600); err != nil {
			t.Fatal(err)
		}
	}
	// Oturumu olmayan profil listelenmemeli.
	if _, err := profilKlasoru("bos"); err != nil {
		t.Fatal(err)
	}

	liste, err := profilListesi()
	if err != nil {
		t.Fatal(err)
	}
	if len(liste) != 2 {
		t.Fatalf("2 profil bekleniyordu, %d geldi", len(liste))
	}
	for _, p := range liste {
		if p.Anahtar != "ahmet" && p.Anahtar != "ayse" {
			t.Errorf("beklenmeyen profil: %s", p.Anahtar)
		}
	}
}

// TestProfilCikar: hesap veriyle ya da verisiz cikarilir; diger hesap etkilenmez.
func TestProfilCikar(t *testing.T) {
	t.Setenv("APPDATA", t.TempDir())

	for _, a := range []string{"ahmet", "ayse"} {
		d, err := profilKlasoru(a)
		if err != nil {
			t.Fatal(err)
		}
		icerik := `{"kullaniciAdi":"` + a + `","cerezler":[{"Name":"s","Value":"x"}]}`
		if err := os.WriteFile(filepath.Join(d, "oturum.json"), []byte(icerik), 0o600); err != nil {
			t.Fatal(err)
		}
	}

	// Veri saklanarak cikarma: oturum gider, klasor kalir.
	if err := profilCikar("ahmet", false); err != nil {
		t.Fatalf("cikarma basarisiz: %v", err)
	}
	liste, _ := profilListesi()
	if len(liste) != 1 || liste[0].Anahtar != "ayse" {
		t.Fatalf("sadece ayse kalmaliydi, liste: %+v", liste)
	}
	kok, _ := veriKlasoru()
	if _, err := os.Stat(filepath.Join(kok, "profiller", "ahmet")); err != nil {
		t.Errorf("veri saklanmaliydi: %v", err)
	}

	// Verisiyle birlikte cikarma: klasor de silinir.
	if err := profilCikar("ayse", true); err != nil {
		t.Fatalf("veriyle cikarma basarisiz: %v", err)
	}
	if _, err := os.Stat(filepath.Join(kok, "profiller", "ayse")); !os.IsNotExist(err) {
		t.Errorf("veri silinmeliydi")
	}
}
