package main

import (
	"flag"
	"fmt"
	"math/rand"
	"net/http"
	"time"

	"github.com/golang/glog"
)

var (
	flagPostgres string
	flagListen   string
)

func init() {
	flag.Set("logtostderr", "true")
}

func handleRobots(w http.ResponseWriter, r *http.Request) {
	// Prevent indexing by any (honest) search engine.
	fmt.Fprintf(w, "User-agent: *\nDisallow: /\n")
}

func main() {
	flag.StringVar(&flagPostgres, "postgres", "", "Postgres connection string (see lib/pq docs)")
	flag.StringVar(&flagListen, "listen", "127.0.0.1:8080", "Address to listen at for public HTTP traffic")
	flag.Parse()

	rand.Seed(time.Now().Unix())

	a, err := newApp(flagPostgres)
	if err != nil {
		glog.Exitf("newApp: %v", err)
	}

	http.HandleFunc("/robots.txt", handleRobots)

	http.HandleFunc("/terms.json", a.handleTermsJson)
	http.HandleFunc("/term.json/", a.handleTermJson)
	http.HandleFunc("/randomterm.json/", a.handleRandomTermJson)

	http.HandleFunc("/terms", a.handleTerms)
	http.HandleFunc("/", a.handleTerms)

	http.HandleFunc("/term/", a.handleTerm)

	glog.Infof("Listening at %q", flagListen)
	if err := http.ListenAndServe(flagListen, nil); err != nil {
		glog.Exit(err)
	}
}
