package main

import (
	"github.com/gopherjs/gopherjs/js"
	"github.com/mame82/hvue"
)

//Very simple vue-router binding, support only Component templates for routes


type VueRouterConfig struct {
	*js.Object
	Routes *js.Object `js:"routes"`
}

type VueRouterOption func(*VueRouterConfig)

func VueRouterRoute(path, name, template string) VueRouterOption {
	route := struct {
		*js.Object
		Path string `js:"path"`
		Name string `js:"name"`
		Component *hvue.Config `js:"component"`
	}{Object:O()}
	route.Path = path
	if len(name) > 0 { route.Name = name }

	//use hvue.Config to generate an component object with given template
	component := &hvue.Config{Object:O()}
	hvue.Template(template)(component)
	route.Component = component


	return func(config *VueRouterConfig) {
		config.Routes.Call("push", route)
	}
}



func NewVueRouter(defaultRoute string, opts ...VueRouterOption) *js.Object {
	c := &VueRouterConfig{Object:O()}
	c.Routes = js.Global.Get("Array").New()

	for _,opt := range opts {
		opt(c)
	}

	jsrouter := js.Global.Get("VueRouter").New(c)
	if len(defaultRoute) > 0 {
		jsrouter.Call("replace", defaultRoute)
	}
	return jsrouter
}


