package main

import (
	"log"

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

	"mojom/vanadium/discovery"
)

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

type advDelegate struct {
	id int32
	proxy *discovery.Discoverer_Proxy
}

func (a *advDelegate) Initialize(ctx application.Context) {
	req, ptr := discovery.CreateMessagePipeForDiscoverer()
	ctx.ConnectToApplication("https://mojo.v.io/discovery.mojo").ConnectToService(&req)
	a.proxy = discovery.NewDiscovererProxy(ptr, bindings.GetAsyncWaiter())
	s := discovery.Service{
		InterfaceName: "v.io/discovery.T",
		Addrs: []string{"localhost:1000", "localhost:2000"},
		Attrs: map[string]string{ "foo" : "bar"},
	}
	id, e1, e2 := a.proxy.Advertise(s, nil)
	if e1 != nil  || e2 != nil{
		log.Println("Error occurred", e1, e2)
		return
	}

	a.id = id
}


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

func (s *advDelegate) Quit() {
	s.proxy.StopAdvertising(s.id)
}


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

func main() {
}
