package main

import "log"
import "fmt"

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

func makeCloudInfoBox(gw *gui.GuiWindow) {
	log.Println("makeCloudInfoBox() START gw =", gw)

	gw.UiTab.Delete(0) // does this make things more or less stable or neither?
	gw.Name = "Cloud Accounts"
	gw = gui.InitGuiWindow(gw)
	// TODO: make this text i18n
	box := gui.HardBox(gw, gui.Yaxis, "Cloud Accounts")

	log.Println("makeCloudInfoBox() START GW IS NOW: gw =", gw)
	log.Println("makeCloudInfoBox() box =", box)

	gui.NewLabel(box, "Hostname:")

	tmp := config.Hostname + " (" + config.IPv6 + ")"
	gui.MakeEntryHbox(box, "hostname:", tmp, true, "Hostname")

	// box = gui.HardBox(gw, gui.Yaxis)
	for key, a := range config.Accounts {
		vbox := gui.NewBox(box, gui.Xaxis, fmt.Sprintf("ACCOUNT %d", key))
		log.Println("account =          ", key, a)
		log.Println("Accounts[key] =    ", config.Accounts[key])
		log.Println("account.Nick =     ", config.Accounts[key].Nick)
		log.Println("account.Username = ", config.Accounts[key].Username)
		log.Println("account.Token =    ", config.Accounts[key].Token)

		// name := "Login" // + config.Accounts[key].Nick
		// makeButton(vbox, config.Accounts[key], nil, name, "LOGIN", login)

		// name  = "Show " + config.Accounts[key].Nick
		// name  = "Show"
		// makeButton(vbox, config.Accounts[key], nil, name, "SHOW", showAccountClick)

		// name  = "Configure"
		makeButton(vbox, config.Accounts[key], nil, "Configure", "CONFIG", showAccountClick)

		name := config.Accounts[key].Nick + " (" + config.Accounts[key].Domain + ")"
		gui.NewLabel(vbox, name)
	}

	Xbox := gui.HardBox(gw, gui.Xaxis, "subdomain test")
	makeButton(Xbox, nil, nil, "Add Account", "ADD TAB", func (*gui.GuiButton) {
		log.Println("makeCloudInfoBox() Add Account")
		createAccount(gw)
	})
	makeButton(Xbox, nil, nil, "Quit", "QUIT", nil)
	makeButton(Xbox, nil, nil, "Debug", "DEBUG", debugClick)
	log.Println("makeCloudInfoBox() END")
}

// func createAccount(gw *gui.GuiWindow) {
func initWindow(gw *gui.GuiWindow, name string, axis int) *gui.GuiBox {
	window := gui.Data.WindowMap[name]
	if (window != nil) {
		box := window.BoxMap["MAINBOX"]
		log.Println("initWindow() tab already exists name =", name)
		gui.ErrorWindow(box.Window, "Create Window Error", "Window " + name + " already exists")
		return nil
	}

	// if there is not an account, then go to 'make account'
	gw.Name = name
	newWindow := gui.InitGuiWindow(gw)

	var box *gui.GuiBox
	if (axis == gui.Xaxis) {
		box = gui.HardBox(newWindow, gui.Xaxis, name)
	} else {
		box = gui.HardBox(newWindow, gui.Yaxis, name)
	}
	return box
}

func createAccount(gw *gui.GuiWindow) {
	box := initWindow(gw, "Create New Account", gui.Yaxis)
	if (box == nil) { return }

	gw = box.Window

	// make a place for someone to enter their subdomain
	hardXbox := gui.HardBox(gw, gui.Xaxis, "subdomain test")
	makeButton(hardXbox, nil, nil, "Generate a Subdomain", "SUBDOMAIN", generateSubdomain)
	gui.NewLabel(hardXbox, "")

	gui.AddEntry(box, "SUBDOMAIN")
	// gui.HorizontalBreak(box)

	hardXbox1 := gui.HardBox(gw, gui.Xaxis, "subdomain test")
	makeButton(hardXbox1, nil, nil, "Create Account", "ADD", addSubdomainClick)
	gui.NewLabel(hardXbox, "")

	log.Println("splashClick() END box =", box)
}

func addSubdomainClick(b *gui.GuiButton) {
	log.Println("addSubdomainClick() START")
	subdomain := gui.GetText(b.Box, "SUBDOMAIN")
	if (subdomain == "") {
		gui.ErrorWindow(b.Box.Window, "Blank Name", "You must have a valid subdomain")
		return
	}
	log.Println("\tsubdomain =", subdomain)

	acc := new(pb.Account)
	acc.Nick	= subdomain
	acc.Domain	= subdomain
	acc.Username	= "jcarr@wit.com"
	acc.Email	= "jcarr@wit.com"
	acc.Password	= "badpass"
	acc.URL		= "http://stackapi-api1.stackapi.customers.wprod.wit.com:4000/"
	config.Accounts = append(config.Accounts, acc)

	makeCloudInfoBox(b.Box.Window)
	State = "done"
	log.Println("addSubdomainClick() END")
}

func generateSubdomain(b *gui.GuiButton) {
	log.Println("generateSubdomain START")
	if values, ok := b.Values.(*myButtonInfo); ! ok {
		log.Println("\tvalues.Accounts error")
	} else {
		log.Println("\tvalues.Accounts =", values.Accounts)
		log.Println("\tvalues.Name =", values.Name)
	}
	// use this way?
	// values, _ := b.Values.(*myButtonInfo)

	if (b == nil) {
		log.Println("generateSubdomain ERROR b == nil")
		return
	}
	// subdomain.SetText("cust00013.wit.dev")

	txt := gui.SetText(b.Box, "SUBDOMAIN", "yourname.customers.wprod.wit.com")
	log.Println("generateSubdomain subdomain = ", txt)
	log.Println("generateSubdomain END")
}