package libbox

import (
	"encoding/binary"
	"io"

	E "github.com/sagernet/sing/common/exceptions"
	"github.com/sagernet/sing/common/varbin"
)

func readError(reader io.Reader) error {
	var hasError bool
	err := binary.Read(reader, binary.BigEndian, &hasError)
	if err != nil {
		return err
	}
	if hasError {
		errorMessage, err := varbin.ReadValue[string](reader, binary.BigEndian)
		if err != nil {
			return err
		}
		return E.New(errorMessage)
	}
	return nil
}

func writeError(writer io.Writer, wErr error) error {
	err := binary.Write(writer, binary.BigEndian, wErr != nil)
	if err != nil {
		return err
	}
	if wErr != nil {
		err = varbin.Write(writer, binary.BigEndian, wErr.Error())
		if err != nil {
			return err
		}
	}
	return nil
}