// 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 android

package plugins

import (
	"unsafe"

	idiscovery "v.io/x/ref/lib/discovery"

	jutil "v.io/x/jni/util"
)

// #include "jni.h"
import "C"

var (
	contextSign     = jutil.ClassSign("io.v.v23.context.VContext")
	adInfoSign      = jutil.ClassSign("io.v.x.ref.lib.discovery.AdInfo")
	scanHandlerSign = jutil.ClassSign("io.v.impl.google.lib.discovery.Plugin$ScanHandler")

	jAdInfoClass            jutil.Class // io.v.x.ref.lib.discovery.AdInfo
	jNativeScanHandlerClass jutil.Class // io.v.android.impl.google.discovery.plugins.NativeScanHandler
)

func Init(env jutil.Env) error {
	var err error
	jAdInfoClass, err = jutil.JFindClass(env, "io/v/x/ref/lib/discovery/AdInfo")
	if err != nil {
		return err
	}
	jNativeScanHandlerClass, err = jutil.JFindClass(env, "io/v/android/impl/google/discovery/plugins/NativeScanHandler")
	if err != nil {
		return err
	}

	return initPluginFactories(env)
}

//export Java_io_v_android_impl_google_discovery_plugins_NativeScanHandler_nativeHandleUpdate
func Java_io_v_android_impl_google_discovery_plugins_NativeScanHandler_nativeHandleUpdate(jenv *C.JNIEnv, _ C.jobject, goRef C.jlong, jAdInfoObj C.jobject) {
	env := jutil.Env(uintptr(unsafe.Pointer(jenv)))
	ch := (*(*chan<- *idiscovery.AdInfo)(jutil.GoRefValue(jutil.Ref(goRef))))

	jAdInfo := jutil.Object(uintptr(unsafe.Pointer(jAdInfoObj)))

	var adInfo idiscovery.AdInfo
	if err := jutil.GoVomCopy(env, jAdInfo, jAdInfoClass, &adInfo); err != nil {
		jutil.JThrowV(env, err)
		return
	}
	ch <- &adInfo
}

//export Java_io_v_android_impl_google_discovery_plugins_NativeScanHandler_nativeFinalize
func Java_io_v_android_impl_google_discovery_plugins_NativeScanHandler_nativeFinalize(jenv *C.JNIEnv, _ C.jobject, goRef C.jlong) {
	jutil.GoDecRef(jutil.Ref(goRef))
}
