// 2 march 2014

package ui

import (
	"unsafe"
)

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

//export dialog_send
func dialog_send(pchan unsafe.Pointer, res C.intptr_t) {
	rchan := (*chan int)(pchan)
	go func() { // send it in a new goroutine like we do with everything else
		*rchan <- int(res)
	}()
}

func _msgBox(parent *Window, primarytext string, secondarytext string, style uintptr) chan int {
	ret := make(chan int)
	uitask <- func() {
		var pwin C.id = nil

		if parent != dialogWindow {
			pwin = parent.sysData.id
		}
		primary := toNSString(primarytext)
		secondary := C.id(nil)
		if secondarytext != "" {
			secondary = toNSString(secondarytext)
		}
		switch style {
		case 0: // normal
			C.msgBox(pwin, primary, secondary, unsafe.Pointer(&ret))
		case 1: // error
			C.msgBoxError(pwin, primary, secondary, unsafe.Pointer(&ret))
		}
	}
	return ret
}

func (w *Window) msgBox(primarytext string, secondarytext string) (done chan struct{}) {
	done = make(chan struct{})
	go func() {
		<-_msgBox(w, primarytext, secondarytext, 0)
		done <- struct{}{}
	}()
	return done
}

func (w *Window) msgBoxError(primarytext string, secondarytext string) (done chan struct{}) {
	done = make(chan struct{})
	go func() {
		<-_msgBox(w, primarytext, secondarytext, 1)
		done <- struct{}{}
	}()
	return done
}