package protokol

import (
	"context"
	"encoding/json"
	"errors"
)

// Yontem adlari. Eklenti ve bridge bu adlarla konusur.
const (
	YontemMerhaba  = "fikoyt/merhaba"
	YontemPing     = "fikoyt/ping"
	YontemAyar     = "fikoyt/ayar"
	YontemParca    = "fikoyt/parca"
	YontemOlay     = "fikoyt/olay"
	YontemOnayIste = "onay.iste"
)

// ProtokolSurumu: bu dosyadaki cerceveli protokolun surumu. El sikisma bunu dogrular.
const ProtokolSurumu = 2

var (
	ErrProtokolUyumsuz = errors.New("protokol: eklenti protokol surumunu desteklemiyor")
)

// ElSikis: eklentiye merhaba gonderir. Eklenti ayni protokol surumunu donerse baglanti hazirdir.
// Donen deger eklentinin kendi bildirdigi adidir.
func ElSikis(ctx context.Context, i *Istemci, bridgeSurum string) (string, error) {
	sonuc, err := i.Cagir(ctx, YontemMerhaba, map[string]any{"protokol": ProtokolSurumu, "bridge": bridgeSurum})
	if err != nil {
		return "", err
	}
	var h struct {
		Protokol int    `json:"protokol"`
		Eklenti  string `json:"eklenti"`
	}
	if json.Unmarshal(sonuc, &h) != nil || h.Protokol != ProtokolSurumu {
		return "", ErrProtokolUyumsuz
	}
	return h.Eklenti, nil
}
