package handler

import (
	"errors"

	"github.com/nspcc-dev/neofs-api-go/pkg/netmap"
	"github.com/nspcc-dev/neofs-s3-gw/api"
	"github.com/nspcc-dev/neofs-s3-gw/api/layer"
	"go.uber.org/zap"
)

type (
	handler struct {
		log *zap.Logger
		obj layer.Client
		cfg *Config
	}

	// Config contains data which handler need to keep.
	Config struct {
		DefaultPolicy *netmap.PlacementPolicy
	}
)

// DefaultPolicy is a default policy of placing container in NeoFS if it's not set at the request.
const DefaultPolicy = "REP 3"

var _ api.Handler = (*handler)(nil)

// New creates new api.Handler using given logger and client.
func New(log *zap.Logger, obj layer.Client, cfg *Config) (api.Handler, error) {
	switch {
	case obj == nil:
		return nil, errors.New("empty NeoFS Object Layer")
	case log == nil:
		return nil, errors.New("empty logger")
	}

	return &handler{
		log: log,
		obj: obj,
		cfg: cfg,
	}, nil
}