package server

import (
	"time"

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

// setupRoutes configures the HTTP routes
func (s *Server) setupRoutes() {
	r := chi.NewRouter()

	// Middleware
	r.Use(middleware.RequestID)
	r.Use(middleware.RealIP)
	r.Use(middleware.Logger)
	r.Use(middleware.Recoverer)
	const requestTimeout = 8 * time.Second
	r.Use(TimeoutMiddleware(requestTimeout))
	r.Use(JSONResponseMiddleware)

	// Routes
	r.Get("/", s.handleRoot())
	r.Get("/status", s.handleStatusHTML())
	r.Get("/status.json", JSONValidationMiddleware(s.handleStatusJSON()).ServeHTTP)

	// AS and prefix detail pages
	r.Get("/as/{asn}", s.handleASDetail())
	r.Get("/prefix/{prefix}", s.handlePrefixDetail())
	r.Get("/prefixlength/{length}", s.handlePrefixLength())
	r.Get("/prefixlength6/{length}", s.handlePrefixLength6())
	r.Get("/ip/{ip}", s.handleIPRedirect())

	// API routes
	r.Route("/api/v1", func(r chi.Router) {
		r.Use(JSONValidationMiddleware)
		r.Get("/stats", s.handleStats())
		r.Get("/ip/{ip}", s.handleIPLookup())
		r.Get("/as/{asn}", s.handleASDetailJSON())
		r.Get("/prefix/{prefix}", s.handlePrefixDetailJSON())
	})

	s.router = r
}
