package main

// Eklenti sayfasindaki ayar formu. Alanlar eklenti_ayar_sema.go'dan uretilir; deger kayitli ayardan okunur.
// Parola web'e ya da sayfaya geri yazilmaz; yalnizca "kayitli" bilgisi gosterilir.

import (
	"encoding/json"
	"fmt"
	"html"
	"strings"
)

// eklentiAyarFormuHTML: bir eklentinin ayar bolumu (eklenti sayfasinin icinde).
func eklentiAyarFormuHTML(p profilBilgi, e kuruluEklenti) string {
	var b strings.Builder
	b.WriteString(`<section class="bolum"><h2>Ayarlar</h2><p class="aciklama">Bu ayarlar bu bilgisayarda saklanir.</p>`)
	alanlar := ayarAlanlari(e.Anahtar)
	if len(alanlar) == 0 {
		b.WriteString(`<div class="bos">Bu eklentinin bridge'de ayari yok.</div></section>`)
		return b.String()
	}
	mevcut := map[string]any{}
	if ham := ayarGoster(kayitliAyarProfil(p.Anahtar, e.Anahtar)); ham != nil {
		_ = json.Unmarshal(ham, &mevcut)
	}
	for _, a := range alanlar {
		deger, varMi := mevcut[a.Ad]
		if !varMi {
			deger = a.Varsayilan
		}
		b.WriteString(`<div class="satir"><div class="bilgi"><div class="baslik">` + html.EscapeString(a.Etiket) +
			`</div><div class="alt">` + html.EscapeString(a.Aciklama) + `</div></div>`)
		b.WriteString(ayarGirdisi(a, deger, mevcut))
		b.WriteString(`</div>`)
	}
	b.WriteString(`<div style="margin-top:14px"><button class="dugme birincil" data-ayar-kaydet="1" data-profil="` +
		html.EscapeString(p.Anahtar) + `" data-anahtar="` + html.EscapeString(e.Anahtar) + `">Kaydet</button></div></section>`)
	b.WriteString(ayarKaydetBetigi)
	return b.String()
}

// ayarGirdisi: alan turune gore girdi elemani.
func ayarGirdisi(a ayarAlani, deger any, mevcut map[string]any) string {
	ad := html.EscapeString(a.Ad)
	switch a.Tur {
	case ayarOnay:
		secili := ""
		if d, _ := deger.(bool); d {
			secili = " checked"
		}
		return `<label class="anahtar"><input type="checkbox" data-ayar="` + ad + `" data-tur="onay"` + secili + `><span></span></label>`
	case ayarSayi:
		return fmt.Sprintf(`<input type="number" data-ayar="%s" data-tur="sayi" min="%d" max="%d" value="%v" style="width:110px">`,
			ad, a.Min, a.Maks, deger)
	case ayarParola:
		yer := "Kayitli degil"
		if v, _ := mevcut["parolaVar"].(bool); v {
			yer = "Kayitli"
		}
		return `<input type="password" data-ayar="` + ad + `" data-tur="parola" maxlength="` + fmt.Sprint(a.Maks) +
			`" autocomplete="new-password" placeholder="` + yer + `" style="width:170px">`
	default:
		return fmt.Sprintf(`<input type="text" data-ayar="%s" data-tur="metin" maxlength="%d" value="%s" style="width:170px">`,
			ad, a.Maks, html.EscapeString(fmt.Sprint(deger)))
	}
}

// ayarKaydetBetigi: "Kaydet" dugmesi formdaki tum alanlari toplar ve yerel uca gonderir.
// Bos parola alani gonderilmez; boylece mevcut parola korunur.
const ayarKaydetBetigi = `<script>
document.addEventListener('click', function (e) {
  var b = e.target.closest('[data-ayar-kaydet]');
  if (!b) return;
  var ayar = {};
  document.querySelectorAll('[data-ayar]').forEach(function (el) {
    var ad = el.dataset.ayar, tur = el.dataset.tur;
    if (tur === 'onay') ayar[ad] = el.checked;
    else if (tur === 'sayi') ayar[ad] = Number(el.value);
    else if (tur === 'parola') { if (el.value) ayar[ad] = el.value; }
    else ayar[ad] = el.value.trim();
  });
  fetch('/eklenti/yerel-ayar', {
    method: 'POST',
    headers: {'Content-Type': 'application/json', 'X-Csrf-Token': document.querySelector('meta[name=csrf]').content},
    body: JSON.stringify({profil: b.dataset.profil, anahtar: b.dataset.anahtar, ayar: ayar})
  }).then(function (r) {
    if (!r.ok) return r.text().then(function (t) { throw new Error(t); });
    location.reload();
  }).catch(function (err) { bildir('Hata: ' + (err.message || 'kaydedilemedi')); });
});
</script>`
