package main

// Eklenti ayar semalari: her eklentinin yerel ayar sayfasinda gosterilecek alanlar.
// Bridge ayarlari opak JSON olarak saklar; bu sema yalnizca yerel formu tanimlar.
// Alan adlari (Ad) eklentinin bekledigi JSON anahtarlariyla birebir ayni olmalidir.
// Kaynak: web'deki cihaz-eklenti-ayar ekrani ve eklentilerin Ayar yapilari.

type ayarTuru string

const (
	ayarMetin  ayarTuru = "metin"
	ayarSayi   ayarTuru = "sayi"
	ayarOnay   ayarTuru = "onay"
	ayarParola ayarTuru = "parola"
)

type ayarAlani struct {
	Ad         string
	Etiket     string
	Aciklama   string
	Tur        ayarTuru
	Min        int // sayi icin alt sinir
	Maks       int // sayi icin ust sinir; metin/parola icin uzunluk siniri
	Varsayilan any
}

// eklentiAyarSemasi: eklenti anahtari -> ayar alanlari. Tabloda olmayan eklentinin bridge ayari yoktur.
var eklentiAyarSemasi = map[string][]ayarAlani{
	"everything": {
		{Ad: "host", Etiket: "Sunucu adresi", Aciklama: "Everything'in calistigi bilgisayar. Bu bilgisayardaysa 127.0.0.1 birakin.", Tur: ayarMetin, Maks: 253, Varsayilan: "127.0.0.1"},
		{Ad: "port", Etiket: "HTTP portu", Aciklama: "Everything HTTP Server ayarindaki port. Varsayilan 8888; bu bilgisayarda 80 ise onu yazin.", Tur: ayarSayi, Min: 1, Maks: 65535, Varsayilan: 8888},
		{Ad: "kullanici", Etiket: "Kullanici adi", Aciklama: "Everything HTTP Server'da kullanici adi tanimliysa girin. Bos birakilirsa kimlik dogrulama kapali olur.", Tur: ayarMetin, Maks: 100, Varsayilan: ""},
		{Ad: "parola", Etiket: "Parola", Aciklama: "Bos birakilirsa mevcut parola korunur. Baglanti sifreli degildir; yalnizca guvendiginiz bir agda kullanin.", Tur: ayarParola, Maks: 200},
		{Ad: "kucukResim", Etiket: "Kucuk resimleri goster", Aciklama: "Resim, PDF, video ve CATPart dosyalari icin Windows onizlemesi gosterilir.", Tur: ayarOnay, Varsayilan: false},
		{Ad: "simgeGoster", Etiket: "Dosya simgelerini goster", Aciklama: "Her sonucun yaninda Windows'un dosya turu simgesi gorunur.", Tur: ayarOnay, Varsayilan: false},
		{Ad: "kucukMaksDeneme", Etiket: "En fazla denenecek dosya", Aciklama: "Bir aramada onizleme icin en cok kac dosya denensin (1-200).", Tur: ayarSayi, Min: 1, Maks: 200, Varsayilan: 40},
		{Ad: "kucukSureSn", Etiket: "En uzun sure (saniye)", Aciklama: "Onizleme uretimi bu sureyi asarsa kalan dosyalar atlanir (1-30).", Tur: ayarSayi, Min: 1, Maks: 30, Varsayilan: 3},
		{Ad: "kucukToplamKb", Etiket: "Toplam boyut (KB)", Aciklama: "Bir sonuca eklenecek onizlemelerin toplam boyutu (50-500).", Tur: ayarSayi, Min: 50, Maks: 500, Varsayilan: 200},
		{Ad: "indirmeSuresiDk", Etiket: "Baglanti gecerlilik suresi (dakika)", Aciklama: "Indirme baglantisi bu sure sonunda gecersiz olur (1-1440).", Tur: ayarSayi, Min: 1, Maks: 1440, Varsayilan: 30},
		{Ad: "indirmeMaksMb", Etiket: "En buyuk dosya boyutu (MB)", Aciklama: "Bundan buyuk dosyalar icin indirme baglantisi uretilmez (1-4096).", Tur: ayarSayi, Min: 1, Maks: 4096, Varsayilan: 2048},
	},
	"usb": {
		{Ad: "takmaBildir", Etiket: "USB takildiginda bildir", Aciklama: "Bir USB bellek ya da SD kart takildiginda bildirim al.", Tur: ayarOnay, Varsayilan: true},
		{Ad: "cikarmaBildir", Etiket: "USB cikarildiginda bildir", Aciklama: "Bir USB bellek ya da SD kart cikarildiginda bildirim al.", Tur: ayarOnay, Varsayilan: true},
		{Ad: "etiketGoster", Etiket: "Surucu adini goster", Aciklama: "Bildirimde surucu etiketi (ornegin bellek adi) yer alsin.", Tur: ayarOnay, Varsayilan: true},
	},
}

// ayarAlanlari: eklentinin ayar alanlari. Semasi olmayan eklenti icin nil doner.
func ayarAlanlari(anahtar string) []ayarAlani {
	return eklentiAyarSemasi[anahtar]
}
