package main

import (
	"flag"
	"net/http"
	"time"

	"github.com/rs/zerolog"
	"github.com/rs/zerolog/log"

	chi "github.com/go-chi/chi/v5"
)

// Here we are implementing the NotImplemented handler. Whenever an API endpoint is hit
// we will simply return the message "Not Implemented"
var NotImplemented = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
	w.Write([]byte("Not Implemented"))
})

func main() {
	// Prepare logger
	zerolog.TimeFieldFormat = time.DateTime

	var (
		isDev = flag.Bool("dev", false, "run in development mode")
	)
	flag.Parse()

	mux := chi.NewRouter()

	if *isDev {
		registerDevRoutes(mux)
	} else {
		registerProdRoutes(mux)
	}

	// Our API is going to consist of three routes
	// /status - which we will call to make sure that our API is up and running
	// /products - which will retrieve a list of products that the user can leave feedback on
	// /products/{slug}/feedback - which will capture user feedback on products
	mux.Get("/status", NotImplemented)
	mux.Get("/products", NotImplemented)
	mux.Post("/products/{slug}/feedback", NotImplemented)

	server := &http.Server{
		Addr:         "0.0.0.0:8443",
		Handler:      mux,
		ReadTimeout:  10 * time.Second,
		WriteTimeout: time.Minute,
	}

	log.Info().Msg("Listening on port 8443...")
	if err := server.ListenAndServe(); err != nil {
		log.Error().Msg(err.Error())
		panic(err)
	}
}
