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(RequestLoggerMiddleware(s.logger.Logger)) // Structured request logging
	r.Use(middleware.Recoverer)
	const requestTimeout = 30 * time.Second // Increased from 8s for slow queries
	r.Use(TimeoutMiddleware(requestTimeout, s.logger.Logger))
	r.Use(JSONResponseMiddleware)

	// Routes
	r.Get("/", s.handleIndex())
	r.Get("/status", s.handleStatusHTML())
	r.Get("/status.json", JSONValidationMiddleware(s.handleStatusJSON()).ServeHTTP)
	r.Get("/.well-known/healthcheck.json", JSONValidationMiddleware(s.handleHealthCheck()).ServeHTTP)

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

	// IP info JSON endpoints (replaces old /ip redirect)
	r.Route("/ip", func(r chi.Router) {
		r.Use(JSONValidationMiddleware)
		r.Get("/", s.handleIPInfo())       // Client IP
		r.Get("/{addr}", s.handleIPInfo()) // Specified IP
	})

	// 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}/{len}", s.handlePrefixDetailJSON())
	})

	s.router = r
}
