//go:build !pro

package goreplay

import (
	"errors"
	"time"

	"github.com/buger/goreplay/internal/size"
)

var _ PluginWriter = (*BinaryOutput)(nil)

// BinaryOutputConfig struct for holding binary output configuration
type BinaryOutputConfig struct {
	Workers        int           `json:"output-binary-workers"`
	Timeout        time.Duration `json:"output-binary-timeout"`
	BufferSize     size.Size     `json:"output-tcp-response-buffer"`
	Debug          bool          `json:"output-binary-debug"`
	TrackResponses bool          `json:"output-binary-track-response"`
}

// BinaryOutput plugin manage pool of workers which send request to replayed server
// By default workers pool is dynamic and starts with 10 workers
// You can specify fixed number of workers using `--output-tcp-workers`
type BinaryOutput struct {
	address string
}

// NewBinaryOutput constructor for BinaryOutput
// Initialize workers
func NewBinaryOutput(address string, config *BinaryOutputConfig) PluginReadWriter {
	return &BinaryOutput{address: address}
}

// PluginWrite writes a message to this plugin
func (o *BinaryOutput) PluginWrite(msg *Message) (n int, err error) {
	return 0, errors.New("binary output is only available in PRO version")
}

// PluginRead reads a message from this plugin
func (o *BinaryOutput) PluginRead() (*Message, error) {
	return nil, errors.New("binary output is only available in PRO version")
}

func (o *BinaryOutput) String() string {
	return "Binary output: " + o.address + " (PRO version required)"
}

// Close closes this plugin for reading
func (o *BinaryOutput) Close() error {
	return nil
}
