package main

import (
	"log"
	"net/http"
	"os"

	"code.secondbit.org/ducky/subscriptions.hg"
	"code.secondbit.org/ducky/subscriptions.hg/api"
	"code.secondbit.org/trout.hg"

	"github.com/stripe/stripe-go"

	"golang.org/x/net/context"
)

func main() {
	log.SetFlags(log.LstdFlags | log.Llongfile)
	log.Printf("Running version '%s'\n", subscriptions.Version)
	var subscriptionStore subscriptions.SubscriptionStore
	if os.Getenv("SUBSCRIPTIONS_PG_DB") != "" {
		p, err := subscriptions.NewPostgres(os.Getenv("SUBSCRIPTIONS_PG_DB"))
		if err != nil {
			log.Fatal(err)
		}
		subscriptionStore = p
	} else {
		subscriptionStore = subscriptions.NewMemstore()
	}
	var stripeClient subscriptions.Stripe
	if os.Getenv("STRIPE_KEY") != "" {
		stripeClient = subscriptions.NewStripe(os.Getenv("STRIPE_KEY"), stripe.GetBackend(stripe.APIBackend))
	} else {
		log.Fatal("STRIPE_KEY environment variable must be set!")
	}
	c := api.WithStripeClient(stripeClient, api.WithSubscriptionStore(subscriptionStore, context.Background()))
	router := trout.Router{}
	api.HandleSubscriptions(&router, c)
	http.Handle("/", router)
	log.Println("Listening on 9001")
	log.Fatal(http.ListenAndServe("0.0.0.0:9001", nil))
}
