package drop

/*
#cgo pkg-config: gtk+-3.0

#include "drop.h"
*/
import "C"

import (
	"sync"

	"github.com/kataras/go-events"
)

var Emmiter events.EventEmmiter
var mu = sync.Mutex{}

func init() {
	Emmiter = events.New()
}

func OpenWindow(files []string) {
	mu.Lock()
	defer mu.Unlock()

	size := C.int(len(files))
	urisUnsafe := C.dragUrisMake(size)
	defer C.dragUrisFree(urisUnsafe, size)

	for i, file := range files {
		C.dragUrisSetFile(urisUnsafe, C.CString(file), C.int(i))
	}

	C.dragWindowOpen(urisUnsafe)
}

func CloseWindow() {
	C.dragWindowClose()
}

//export goDragCreate
func goDragCreate(widget *C.GtkWidget, event *C.GdkEvent, user_data C.gpointer) {
	go Emmiter.Emit("create")
}

//export goDragCursorEnter
func goDragCursorEnter(widget *C.GtkWidget, event *C.GdkEvent, user_data C.gpointer) {
	go Emmiter.Emit("cursor-enter")
}

//export goDragButtonPress
func goDragButtonPress(widget *C.GtkWidget, event *C.GdkEvent, user_data C.gpointer) {
	go Emmiter.Emit("button-press")
}

//export goDragBegin
func goDragBegin(widget *C.GtkWidget, context *C.GdkDragContext, user_data C.gpointer) {
	go Emmiter.Emit("begin")
}

//export goDragFinish
func goDragFinish(succeeded C.gboolean) {
	go Emmiter.Emit("finish", bool(succeeded == C.int(1)))
}