package protokol

import "encoding/json"

// Yanitla: karsi tarafin id'li istegine cevap yollar. hata doluysa sonuc yerine hata yazilir.
// Kuyruk doluysa ErrMesgul doner.
func (i *Istemci) Yanitla(id json.RawMessage, sonuc any, hata *Hata) error {
	var rb json.RawMessage
	if hata == nil {
		b, err := json.Marshal(sonuc)
		if err != nil {
			return err
		}
		rb = b
	}
	cerc, err := Cerceve(Mesaj{Id: id, Result: rb, Error: hata})
	if err != nil {
		return err
	}
	i.mu.Lock()
	kapali := i.kapali
	i.mu.Unlock()
	if kapali {
		return ErrKapali
	}
	select {
	case i.yazici <- cerc:
		return nil
	default:
		return ErrMesgul
	}
}

// Bitti: baglanti kapandiginda kapanan kanal. Surec izleyicisi bunu bekler.
func (i *Istemci) Bitti() <-chan struct{} {
	return i.cikis
}
