// fikoyt-eklenti-dosya-yoneticisi (SDK surumu, Asama 4.3): bridge uzerinden web'e dosya
// listeleme, okuma, yazma, kopyalama ve silme saglar.
// Protokol 2 (SDK): cerceveli JSON-RPC. Kalici oturum: her islem ayni oturumdan gelir.
// Izin kontrolu, yazma oturumu ve onay mantigi BRIDGE'de kalir (dosya_calistir.go,
// dosya_izin.go); bu eklenti yalnizca gelen istegi dogrular ve calistirir. Aynen korunur.
// Yazma ve kopyalama once gecici dosyaya yazilir, sonra yeniden adlandirilir (yarim dosya kalmaz).
// Platformdan bagimsiz mantik dosya.go icinde.
package main

import (
	"encoding/json"
	"errors"
	"os"

	sdk "fikoyt-eklenti-sdk"
)

func main() {
	e := sdk.Yeni("dosya-yoneticisi").Havuz(4)

	e.Kayit("listele", func(c *sdk.Cagri) (any, error) {
		var v veriIslem
		if err := json.Unmarshal(c.Veri, &v); err != nil {
			return nil, errors.New("gecersiz veri")
		}
		return ciktiSonuc(listele(v.Yol))
	})

	e.Kayit("oku", func(c *sdk.Cagri) (any, error) {
		var v veriIslem
		if err := json.Unmarshal(c.Veri, &v); err != nil {
			return nil, errors.New("gecersiz veri")
		}
		return ciktiSonuc(oku(v))
	})

	e.Kayit("yaz", func(c *sdk.Cagri) (any, error) {
		var v veriIslem
		if err := json.Unmarshal(c.Veri, &v); err != nil {
			return nil, errors.New("gecersiz veri")
		}
		return ciktiSonuc(yaz2(v))
	})

	e.Kayit("kopyala", func(c *sdk.Cagri) (any, error) {
		var v veriIslem
		if err := json.Unmarshal(c.Veri, &v); err != nil {
			return nil, errors.New("gecersiz veri")
		}
		return ciktiSonuc(kopyala(v))
	})

	e.Kayit("sil", func(c *sdk.Cagri) (any, error) {
		var v veriIslem
		if err := json.Unmarshal(c.Veri, &v); err != nil {
			return nil, errors.New("gecersiz veri")
		}
		return ciktiSonuc(sil(v))
	})

	// Girdi kapaninca (bridge sureci durdurunca) Calistir doner; surec temiz biter.
	_ = e.Calistir(os.Stdin, os.Stdout)
}

// ciktiSonuc: eski {tamam, veri, hata} bicimini SDK'nin (any, error) donusune cevirir.
// Basari: Veri (map[string]any) dogrudan result olarak gider; bridge ekCiktiyaCevir ile
// ayni eklentiCikti.Veri'ye koyar (sunucuya giden veri degismez). Hata: Hata mesaji
// error olarak doner (JSON-RPC hatasi -> bridge eklentiCikti.Hata).
func ciktiSonuc(c cikti) (any, error) {
	if !c.Tamam {
		return nil, errors.New(c.Hata)
	}
	return c.Veri, nil
}
