// Copyright 2015 The Chromium 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 bindings

import (
	"mojo/public/go/system"
)

// MessagePipeHandleOwner owns a message pipe handle, it can only pass it
// invalidating itself or close it.
type MessagePipeHandleOwner struct {
	handle system.MessagePipeHandle
}

// PassMessagePipe passes ownership of the underlying message pipe handle to
// the newly created handle object, invalidating the underlying handle object
// in the process.
func (o *MessagePipeHandleOwner) PassMessagePipe() system.MessagePipeHandle {
	if o.handle == nil {
		return &InvalidHandle{}
	}
	return o.handle.ToUntypedHandle().ToMessagePipeHandle()
}

// Close closes the underlying handle.
func (o *MessagePipeHandleOwner) Close() {
	if o.handle != nil {
		o.handle.Close()
	}
}

// NewMessagePipeHandleOwner creates |MessagePipeHandleOwner| that owns the
// provided message pipe handle.
func NewMessagePipeHandleOwner(handle system.MessagePipeHandle) MessagePipeHandleOwner {
	return MessagePipeHandleOwner{handle}
}

// InterfaceRequest represents a request from a remote client for an
// implementation of mojo interface over a specified message pipe. The
// implementor of the interface should remove the message pipe by calling
// PassMessagePipe() and attach it to the implementation.
type InterfaceRequest struct {
	MessagePipeHandleOwner
}

// InterfacePointer owns a message pipe handle with an implementation of mojo
// interface attached to the other end of the message pipe. The client of the
// interface should remove the message pipe by calling PassMessagePipe() and
// attach it to the proxy.
type InterfacePointer struct {
	MessagePipeHandleOwner
}

// CreateMessagePipeForInterface creates a message pipe with interface request
// on one end and interface pointer on the other end. The interface request
// should be attached to appropriate mojo interface implementation and
// the interface pointer should be attached to mojo interface proxy.
func CreateMessagePipeForMojoInterface() (InterfaceRequest, InterfacePointer) {
	r, h0, h1 := system.GetCore().CreateMessagePipe(nil)
	if r != system.MOJO_RESULT_OK {
		panic("can't create a message pipe")
	}
	return InterfaceRequest{MessagePipeHandleOwner{h0}}, InterfacePointer{MessagePipeHandleOwner{h1}}
}
