// Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package fidl

const FidlWireFormatMagicNumberInitial = 0x01

const FidlV2WireFormatFlagMask = 0x02

// MarshalerContext stores flags to control marshaling/unmarshaling.
//
// This is currently empty. We keep it around to ease the implementation of
// context-dependent behavior for future migrations.
type MarshalerContext struct{}

// NewCtx returns the default context.
// During migrations, this controls the default write path.
func NewCtx() MarshalerContext {
	return MarshalerContext{}
}

// MessageHeader represents a transactional message header.
type MessageHeader struct {
	_       struct{} `fidl:"s" fidl_size_v2:"16" fidl_alignment_v2:"8"`
	Txid    uint32   `fidl:"0" fidl_offset_v2:"0" fidl_bounds:""`
	Flags   [3]uint8 `fidl:"4" fidl_offset_v2:"4" fidl_bounds:""`
	Magic   uint8    `fidl:"7" fidl_offset_v2:"7" fidl_bounds:""`
	Ordinal uint64   `fidl:"8" fidl_offset_v2:"8" fidl_bounds:""`
}

func (msg *MessageHeader) ValidateWireFormat() error {
	if msg.Magic != FidlWireFormatMagicNumberInitial {
		return ErrUnknownMagic
	}
	if msg.Flags[0]&FidlV2WireFormatFlagMask == 0 {
		return ErrUnsupportedWireFormatVersion
	}
	return nil
}

// NewCtx creates a new MarshalerContext for unmarshaling based on msg.Flags.
// During migrations, this controls dynamic behavior in the read path.
func (msg *MessageHeader) NewCtx() MarshalerContext {
	return MarshalerContext{}
}

var mMessageHeader = MustCreateMarshaler(MessageHeader{})

var MessageHeaderSize = 16

func (msg *MessageHeader) Marshaler() Marshaler {
	return mMessageHeader
}

// NewHeader create a new MessageHeader for marshaling with the correct flags
// set based on the MarshalerContext. It is the caller's responsibilty to set
// the transaction ID and method ordinal
func (ctx MarshalerContext) NewHeader() MessageHeader {
	return MessageHeader{
		Flags: [3]uint8{FidlV2WireFormatFlagMask, 0, 0},
		Magic: FidlWireFormatMagicNumberInitial,
	}
}
