package main

// import "os"
import "log"
import "fmt"
import "time"

import "github.com/davecgh/go-spew/spew"

import "git.wit.com/wit/gui"
import pb "git.wit.com/wit/witProtobuf"

import "github.com/andlabs/ui"
import _ "github.com/andlabs/ui/winmanifest"

var first *gui.GuiWindow
var config *pb.Config

// This sometimes crashes on the most recent window 
// under linux. but it doesn't always crash

func main() {
	config = pb.MakeDefaultConfig()
	// gui.Data.Config = c

	i := 1

	config.Width = int32(400 + 50 * i)
	config.Height = int32(400 + 50 * i)
	config.Hostname = fmt.Sprintf("splash %d", i)
	first = StartNewWindow(config, true, "SPLASH")

	i += 1
	config.Width = int32(400 + 50 * i)
	config.Hostname = fmt.Sprintf("splash %d", i)
	StartNewWindow(config, true, "BLAH")

	i += 1
	config.Width = int32(400 + 50 * i)
	config.Hostname = fmt.Sprintf("splash %d", i)
	StartNewWindow(config, false, "BLAH")

	for {
		i += 1
		config.Width = int32(400 + 50 * i)
		config.Hostname = fmt.Sprintf("splash %d", i)
		StartNewWindow(config, false, "SPLASH")

		i += 1
		config.Width = int32(400 + 50 * i)
		config.Hostname = fmt.Sprintf("splash %d", i)
		StartNewWindow(config, false, "BLAH")
	}
}

func StartNewWindow(c *pb.Config, bg bool, action string) *gui.GuiWindow {
	log.Println("InitNewWindow() Create a new window")

	var newGuiWindow *gui.GuiWindow
	newGuiWindow = new(gui.GuiWindow)
	// newGuiWindow.Config = c


	/*
	ui.OnShouldQuit(func() bool {
		// mouseClick(&newBM)
                ui.Quit()
		return true
	})
	*/

	time.Sleep(1000 * time.Millisecond)
	if (bg) {
		log.Println("ShowWindow() IN NEW GOROUTINE")
		go ui.Main(func() {
			InitWindow(newGuiWindow)
		})
		time.Sleep(2000 * time.Millisecond)
	} else {
		log.Println("ShowWindow() WAITING for ui.Main()")
		ui.Main(func() {
			InitWindow(newGuiWindow)
		})
	}
	return newGuiWindow
}

func InitWindow(gw *gui.GuiWindow) {
	log.Println("InitWindow() NEW WINDOW gw =", gw)

	c := config
	gw.UiWindow = ui.NewWindow("", int(c.Width), int(c.Height), true)
	// gw.UiWindow.SetBorderless(false)

	blah := gw
	gw.UiWindow.OnClosing(func(*ui.Window) bool {
		log.Println("InitWindow() OnClosing() blah")
		log.Println("InitWindow() OnClosing() blah")
		log.Println("InitWindow() OnClosing() blah")
		log.Println("InitWindow() OnClosing() blah")
		spew.Dump(blah)
		spew.Dump(gw)
		log.Println("InitWindow() OnClosing() THIS WINDOW IS CLOSING gw=", gw)
		spew.Dump(gw)
		spew.Dump(gw.UiWindow)
		// mouseClick(&newBM)
		if (gw.UiWindow != nil) {
			gw.UiWindow.Hide()
		}
		time.Sleep(1000 * time.Millisecond)
		spew.Dump(gw)
		// gw.UiWindow.Destroy()
                ui.Quit()
		time.Sleep(1000 * time.Millisecond)
		return true
	})

	// gw.UiWindow.SetChild(gw.T)
	// gw.UiWindow.SetMargined(true)

	log.Println("InitWindow() Show() gw.Name =", gw.Name)
	gw.UiWindow.Show()
}