package main

/*
	a simple function to handle widget actions

	You can tie this into your toolkit here.
*/

import (
	"go.wit.com/log"
	"go.wit.com/lib/widget"
	// "go.wit.com/gui/toolkits/tree"
)

func doAction(a widget.Action) {
	log.Log(INFO, "doAction() START a.ActionType =", a.ActionType)
	log.Log(INFO, "doAction() START a.ProgName =", a.ProgName)

	if (a.ActionType == widget.ToolkitInit) {
		return
	}

	log.Log(INFO, "doAction() START a.WidgetId =", a.WidgetId, "a.ParentId =", a.ParentId)
	switch a.WidgetType {
	case widget.Root:
		me.treeRoot = me.myTree.AddNode(&a)
		log.Log(INFO, "doAction() found treeRoot")
		return
	}

	switch a.ActionType {
	case widget.Add:
		me.myTree.AddNode(&a)
		return
	}

	n := me.treeRoot.FindWidgetId(a.WidgetId)
	if n == nil {
		log.Warn("FindId() n == nil", a.WidgetId, a.ActionType)
		log.Warn("FindId() n == nil", a.WidgetId, a.ActionType)
		log.Warn("FindId() n == nil", a.WidgetId, a.ActionType)
		log.Warn("Aaaaa!, return")
		return
	}

	switch a.ActionType {
	case widget.Show:
		n.State.Visable = true
	case widget.Hide:
		n.State.Visable = false
	case widget.Enable:
		n.State.Visable = true
	case widget.Disable:
		n.State.Visable = false
	case widget.Get:
		log.Warn("value =", n.State.Value)
	case widget.GetText:
		log.Warn("value =", n.String())
	case widget.Set:
		n.State.Value = a.State.Value
	case widget.SetText:
		log.Warn("GOT TO SetText()", a.WidgetId)
		log.Warn("GOT TO SetText()", a.WidgetId)
		log.Warn("GOT TO SetText()", a.WidgetId)
		log.Warn("GOT TO SetText()", a.WidgetId)
		if n == nil {
			log.Warn("HOT DIGGITY. n == nil")
		}
		n.State.Value = a.State.Value
	case widget.AddText:
		n.State.Strings = append(a.State.Strings, widget.GetString(a.State.Value))
	case widget.Margin:
		n.State.Pad = true
	case widget.Unmargin:
		n.State.Pad = false
	case widget.Pad:
		n.State.Pad = true
	case widget.Unpad:
		n.State.Pad = false
	case widget.Delete:
		log.Warn("doAction() TODO: Delete()")
		// n.Delete()
	case widget.Move:
		log.Warn("doAction() TODO: Move()")
	default:
		log.Log(ERROR, "doAction() Unknown =", a.ActionType, a.WidgetType)
	}
	log.Log(INFO,  "doAction() END =", a.ActionType, a.WidgetType)
}
