package main

import (
	"flag"
	"fmt"
	"log"
	"os"
	"strings"

	"github.com/coreos/go-etcd/etcd"
)

var (
	etcdAddrs = StringArray{}
)

type StringArray []string

func (a *StringArray) Set(s string) error {
	*a = append(*a, s)
	return nil
}

func (a *StringArray) String() string {
	return strings.Join(*a, ",")
}

func main() {
	flag.Var(&etcdAddrs, "etcd-address", "address to the etcd server (may be specified more than once)")
	flag.Parse()
	if len(etcdAddrs) < 1 {
		if os.Getenv("ETCD_NAME") != "" {
			etcdAddrs = []string{"http://etcd:" + os.Getenv("ETCD_PORT_4001_TCP_PORT") + "/"}
		} else {
			flag.Usage()
			return
		}
	}
	log.Println("Using etcd servers", etcdAddrs)
	client := etcd.NewClient(etcdAddrs)
	resp, err := client.Get("/code.secondbit.org/gifs/api/", false, true)
	if err != nil {
		log.Fatalln(err)
		return
	}
	context, err := getEtcdContext(resp.Node)
	if err != nil {
		log.Fatalln(err)
		return
	}
	err = context.Validate()
	if err != nil {
		log.Fatalln(err)
		return
	}
	listenAddr := ":8080"
	for _, node := range resp.Node.Nodes {
		if node.Key == "/listen_addr" {
			listenAddr = node.Value
			fmt.Println("Set listenAddr to " + node.Value)
			break
		}
	}
	log.Println("Going to listen on", listenAddr)

	/*
		var router *mux.Router
		if context.RootDomain == "" {
			fmt.Println("Using path muxer")
			router = api.GetPathMuxer(context)
		} else {
			fmt.Println("Using domain muxer")
			router = api.GetDomainMuxer(context)
		}
		http.Handle("/", router)
		fmt.Println("Listening on " + listenAddr)
		err = http.ListenAndServe(listenAddr, nil)
		if err != nil {
			panic(err)
		}
	*/
}
