package accessbox

import (
	"github.com/nspcc-dev/neofs-api-go/pkg/token"
)

type bearerBox struct {
	tkn *token.BearerToken
}

// NewBearerBox wraps given bearer token into BearerTokenBox.
func NewBearerBox(token *token.BearerToken) BearerTokenBox {
	return &bearerBox{tkn: token}
}

// Marshal serializes bearer token.
func (b *bearerBox) Marshal() ([]byte, error) {
	return b.tkn.Marshal(nil)
}

// Marshal initializes bearer box from its serialized representation.
func (b *bearerBox) Unmarshal(data []byte) error {
	tkn := token.NewBearerToken()

	err := tkn.Unmarshal(data)
	if err != nil {
		return err
	}

	b.SetToken(tkn)

	return nil
}

// Token unwraps bearer token from the box.
func (b *bearerBox) Token() *token.BearerToken {
	return b.tkn
}

// SetToken sets new token in the box.
func (b *bearerBox) SetToken(tkn *token.BearerToken) {
	b.tkn = tkn
}