// Copyright 2016 The Vanadium 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 mojo

package main

import (
	"flag"
	"fmt"
	"os"

	"mojo/public/go/application"
	"mojo/public/go/system"

	"v.io/mojo/discovery/apptest"
)

//#include "mojo/public/c/system/types.h"
import "C"

func init() {
	// Add flag placeholders to suppress warnings on unhandled mojo flags.
	flag.String("child-connection-id", "", "")
	flag.String("platform-channel-handle-info", "", "")
}

type delegate struct{}

func (*delegate) Initialize(mctx application.Context) {
	os.Args = mctx.Args()
	if len(os.Args) == 0 {
		// TODO(jhahn): mojo_run doesn't pass the service url when there is
		// no flags. See https://github.com/domokit/mojo/issues/586.
		os.Args = []string{mctx.URL()}
	}
	// mojo_test checks the output for the test results since mojo_shell
	// always exits with 0.
	if apptest.RunAppTests(mctx) == 0 {
		fmt.Println("[  PASSED  ]")
	} else {
		fmt.Println("[  FAILED  ]")
	}
	mctx.Close()
}

func (*delegate) AcceptConnection(connection *application.Connection) { connection.Close() }
func (*delegate) Quit()                                               {}

//export MojoMain
func MojoMain(handle C.MojoHandle) C.MojoResult {
	application.Run(&delegate{}, system.MojoHandle(handle))
	return C.MOJO_RESULT_OK
}

func main() {}
