package main

import (
	"strings"
	"testing"
	"time"
)

// Gecmis: en yeni once doner ve limiti asmaz.
func TestIzinGecmisiSiraVeLimit(t *testing.T) {
	t.Setenv("APPDATA", t.TempDir())
	eslesmeTestHesap(t)

	for i := 0; i < izinGecmisiLimit+5; i++ {
		izinGecmisiEkle("ahmet", izinGecmisKaydi{Tur: "site", Anahtar: "usb", Sonuc: "verildi", Zaman: time.Unix(int64(i), 0)})
	}
	liste := izinGecmisiOku("ahmet")
	if len(liste) != izinGecmisiLimit {
		t.Fatalf("limit %d beklenirdi, %d geldi", izinGecmisiLimit, len(liste))
	}
	if liste[0].Zaman.Unix() != int64(izinGecmisiLimit+4) {
		t.Fatalf("en yeni kayit basta olmali, %d geldi", liste[0].Zaman.Unix())
	}
}

// Site adi: token ozetinden eslesen site bulunur, yoksa bilinmeyen.
func TestSiteAdiOzetten(t *testing.T) {
	t.Setenv("APPDATA", t.TempDir())
	eslesmeTestHesap(t)
	if err := eslesmeKaydetVeyaGuncelle("https://fikoyt.com", tokenOzeti("tok")); err != nil {
		t.Fatal(err)
	}
	if got := siteAdiOzetten("ahmet", tokenOzeti("tok")); got != "https://fikoyt.com" {
		t.Fatalf("site %q geldi", got)
	}
	if got := siteAdiOzetten("ahmet", "yok"); got != "Bilinmeyen site" {
		t.Fatalf("bilinmeyen site beklenirdi, %q geldi", got)
	}
}

// Tum izinleri iptal: site yetkisi, klasor izni ve bayraklar kapanir.
func TestTumIzinleriIptalEt(t *testing.T) {
	t.Setenv("APPDATA", t.TempDir())
	yetkiBellekSifirla()
	eslesmeTestHesap(t)

	if err := yetkiVerProfil("ahmet", "everythingAra", "ozet", time.Hour); err != nil {
		t.Fatal(err)
	}
	if err := izinleriKaydetProfil("ahmet", Izinler{EverythingAra: true}); err != nil {
		t.Fatal(err)
	}
	if err := dosyaIzinleriKaydet("ahmet", DosyaIzinleri{Klasorler: []DosyaKlasorIzni{{Kok: `C:\x`, Islemler: []string{"oku"}, Bitis: time.Now().Add(time.Hour).Unix()}}}); err != nil {
		t.Fatal(err)
	}

	if err := tumIzinleriIptalEt("ahmet"); err != nil {
		t.Fatal(err)
	}
	if len(aktifSiteIzinleri("ahmet")) != 0 {
		t.Fatal("site izinleri kapanmis olmali")
	}
	if izinOkuProfil("ahmet").EverythingAra {
		t.Fatal("izin bayragi kapanmis olmali")
	}
	if len(dosyaIzinOku("ahmet").Klasorler) != 0 {
		t.Fatal("klasor izinleri kapanmis olmali")
	}
}

// Yonetim sayfasi: aktif izin, klasor izni ve gecmis gorunur; iptal dugmeleri var.
func TestIzinYonetimHTML(t *testing.T) {
	t.Setenv("APPDATA", t.TempDir())
	yetkiBellekSifirla()
	eslesmeTestHesap(t)
	if err := eslesmeKaydetVeyaGuncelle("https://fikoyt.com", tokenOzeti("tok")); err != nil {
		t.Fatal(err)
	}
	if err := yetkiVerProfil("ahmet", "everythingAra", tokenOzeti("tok"), time.Hour); err != nil {
		t.Fatal(err)
	}
	izinGecmisiEkle("ahmet", izinGecmisKaydi{Tur: "site", Anahtar: "usb", Site: "https://fikoyt.com", Sonuc: "reddedildi"})

	s := izinYonetimHTML(profilBilgi{Anahtar: "ahmet", KullaniciAdi: "ahmet"}, "tok")
	for _, parca := range []string{"https://fikoyt.com", "/ayarlar/izin-iptal", "/ayarlar/izin-hepsi", "Reddedildi", "İstek geçmişi"} {
		if !strings.Contains(s, parca) {
			t.Fatalf("eksik: %s", parca)
		}
	}
}
