package api

import (
	"net/http"

	"github.com/gorilla/mux"
)

func SetupRouter(s *APIServer) *mux.Router {
	r := mux.NewRouter()

	// Aplicar middleware de logging a todas las rutas
	r.Use(requestLoggerMiddleware)

	// Definir rutas
	api := r.PathPrefix("/api").Subrouter()

	facturas := api.PathPrefix("/facturas").Subrouter()
	facturas.HandleFunc("/enviar", s.EnviarFacturaHandler).Methods("POST")
	facturas.HandleFunc("/revertir", s.RevertirFacturaHandler).Methods("POST")
	facturas.HandleFunc("/anular", s.AnularFacturaHandler).Methods("POST")
	facturas.HandleFunc("/{id}", s.ConsultarFacturaHandler).Methods("GET")

	dlq := api.PathPrefix("/dlq").Subrouter()
	dlq.HandleFunc("/reprocesar", s.ReprocesarDLQHandler).Methods("POST")

	// Middleware para manejar métodos no permitidos
	r.MethodNotAllowedHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		writeError(w, ErrInvalidContentType)
	})

	// Handler para rutas no encontradas
	r.NotFoundHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		writeError(w, ErrFacturaNotFound)
	})

	return r
}
