// Copyright 2018 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.

// +build fuchsia

package fidl

import (
	"sync"

	"syscall/zx"
)

const FidlWireFormatMagicNumberInitial = 1

// messageBytesPool is a pool of buffers that can fit the data part of any
// FIDL message.
var messageBytesPool = sync.Pool{
	New: func() interface{} {
		return make([]byte, zx.ChannelMaxMessageBytes)
	},
}

// messageHandlesPool is a pool of buffers that can fit the handles part of
// any FIDL message.
var messageHandlesPool = sync.Pool{
	New: func() interface{} {
		return make([]zx.Handle, zx.ChannelMaxMessageHandles)
	},
}

// MessageHeader represents a transactional message header.
type MessageHeader struct {
	_       struct{} `fidl2:"s,16,8"`
	Txid    uint32
	Flags   [3]uint8
	Magic   uint8
	Ordinal uint64
}

var mMessageHeader = MustCreateMarshaler(MessageHeader{})

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

// MarshalHeaderThenMessage marshals a transactional message
// (see https://fuchsia.googlesource.com/fuchsia/+/master/docs/development/languages/fidl/reference/wire-format/README.md#messages-for-transactions).
// It marshals a `MessageHeader`, optionally followed by a `Message` (body).
func MarshalHeaderThenMessage(header *MessageHeader, body Message, data []byte, handles []zx.Handle) (int, int, error) {
	hnb, _, err := Marshal(header, data, nil)
	if err != nil {
		return 0, 0, err
	}
	if body == nil {
		return hnb, 0, nil
	}
	nb, nh, err := Marshal(body, data[hnb:], handles)
	if err != nil {
		return 0, 0, err
	}
	return hnb + nb, nh, nil
}

// UnmarshalHeaderThenMessage unmarshals a transactional message
// (see https://fuchsia.googlesource.com/fuchsia/+/master/docs/development/languages/fidl/reference/wire-format/README.md#messages-for-transactions).
// It unmarshals a `MessageHeader`, optionally followed by a `Message` (body).
func UnmarshalHeaderThenMessage(data []byte, handles []zx.Handle, header *MessageHeader, body Message) error {
	hnb, _, err := Unmarshal(data, nil, header)
	if err != nil {
		return err
	}
	if body == nil {
		return nil
	}
	ctx := MarshalerContext{
		DecodeUnionsFromXunionBytes: shouldDecodeUnionsFromXunionBytes(header),
	}
	if _, _, err := UnmarshalWithContext(ctx, data[hnb:], handles, body); err != nil {
		return err
	}
	return nil
}

func shouldDecodeUnionsFromXunionBytes(header *MessageHeader) bool {
	// TODO(fxb/37361) Implement this predicate.
	return false
}
