// Copyright 2015 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 discovery

import (
	"unsafe"

	jutil "v.io/x/jni/util"
	"v.io/x/ref/lib/discovery"
)

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

var (
	androidContextSign = jutil.ClassSign("android.content.Context")
	contextSign        = jutil.ClassSign("io.v.v23.context.VContext")
	advertisementSign  = jutil.ClassSign("io.v.x.ref.lib.discovery.Advertisement")
	scanHandlerSign    = jutil.ClassSign("io.v.impl.google.lib.discovery.ScanHandler")

	// Global reference for io.v.x.ref.lib.discovery.Advertisement
	jAdvertisementClass jutil.Class
	// Global reference for io.v.android.libs.discovery.ble.BlePlugin
	jBlePluginClass jutil.Class
	// Global reference for io.v.android.libs.discovery.ble.NativeScanHandler
	jNativeScanHandlerClass jutil.Class
)

func Init(env jutil.Env) error {
	var err error

	jAdvertisementClass, err = jutil.JFindClass(env, "io/v/x/ref/lib/discovery/Advertisement")
	if err != nil {
		return err
	}
	jBlePluginClass, err = jutil.JFindClass(env, "io/v/android/libs/discovery/ble/BlePlugin")
	if err != nil {
		return err
	}
	jNativeScanHandlerClass, err = jutil.JFindClass(env, "io/v/android/libs/discovery/ble/NativeScanHandler")
	return err
}

//export Java_io_v_android_libs_discovery_ble_NativeScanHandler_nativeHandleUpdate
func Java_io_v_android_libs_discovery_ble_NativeScanHandler_nativeHandleUpdate(jenv *C.JNIEnv, _ C.jobject, jAdvObj C.jobject, goPtr C.jlong) {
	env := jutil.Env(uintptr(unsafe.Pointer(jenv)))
	ch := (*(*chan<- discovery.Advertisement)(jutil.NativePtr(goPtr)))

	jAdv := jutil.Object(uintptr(unsafe.Pointer(jAdvObj)))
	var adv discovery.Advertisement
	if err := jutil.GoVomCopy(env, jAdv, jAdvertisementClass, &adv); err != nil {
		jutil.JThrowV(env, err)
		return
	}
	ch <- adv
}

//export Java_io_v_android_libs_discovery_ble_NativeScanHandler_nativeFinalize
func Java_io_v_android_libs_discovery_ble_NativeScanHandler_nativeFinalize(jenv *C.JNIEnv, _ C.jobject, goPtr C.jlong) {
	jutil.GoUnref(jutil.NativePtr(goPtr))
}
