package web

import (
	"time"

	"code.chrissexton.org/cws/idea/db"

	packr "github.com/gobuffalo/packr/v2"

	"github.com/speps/go-hashids"

	"github.com/gorilla/mux"
	"github.com/rs/zerolog/log"
	"github.com/stretchr/graceful"
)

type Web struct {
	addr      string
	assetPath string
	db        *db.Database
	salt      string
	h         *hashids.HashID
	box       *packr.Box
}

func New(addr, assetPath string, db *db.Database, box *packr.Box) *Web {
	w := &Web{
		addr:      addr,
		assetPath: assetPath,
		db:        db,
		box:       box,
	}
	if err := db.MakeDB(); err != nil {
		log.Fatal().
			Err(err).
			Msg("could not create database")
	}
	return w
}

func (web *Web) routeSetup() *mux.Router {
	r := mux.NewRouter()
	//api := r.PathPrefix("/v1/").Subrouter()
	r.PathPrefix("/").HandlerFunc(web.indexHandler("/index.html"))
	return r
}

func (web *Web) Serve() {
	middle := web.routeSetup()
	log.Info().Str("addr", "http://"+web.addr).Msg("serving HTTP")
	graceful.Run(web.addr, 10*time.Second, middle)
}
