/*
Copyright (c) Edgeless Systems GmbH

SPDX-License-Identifier: AGPL-3.0-only
*/

package filetransfer

import (
	"errors"

	pb "github.com/edgelesssys/constellation/v2/debugd/service"
)

// recvChunkStream is a wrapper around a RecvFilesStream that only returns chunks.
type recvChunkStream struct {
	stream RecvFilesStream
}

// Recv receives a FileTransferMessage and returns the chunk.
func (s *recvChunkStream) Recv() (*pb.Chunk, error) {
	msg, err := s.stream.Recv()
	if err != nil {
		return nil, err
	}
	chunk := msg.GetChunk()
	if chunk == nil {
		return nil, errors.New("expected chunk")
	}
	return chunk, nil
}

// sendChunkStream is a wrapper around a SendFilesStream that wraps chunks for every message.
type sendChunkStream struct {
	stream SendFilesStream
}

// Send wraps the given chunk in a FileTransferMessage and sends it.
func (s *sendChunkStream) Send(chunk *pb.Chunk) error {
	chunkMessage := &pb.FileTransferMessage_Chunk{
		Chunk: chunk,
	}
	message := &pb.FileTransferMessage{
		Kind: chunkMessage,
	}
	return s.stream.Send(message)
}