package api

import (
	"net/http"

	"proxyrotator/internal/config"
	"proxyrotator/internal/importer"
	"proxyrotator/internal/selector"
	"proxyrotator/internal/store"
	"proxyrotator/internal/tester"
)

// NewRouter 创建 HTTP 路由
func NewRouter(
	store store.ProxyStore,
	importer *importer.Importer,
	tester *tester.HTTPTester,
	selector *selector.Selector,
	cfg *config.Config,
) http.Handler {
	handlers := NewHandlers(store, importer, tester, selector, cfg)

	mux := http.NewServeMux()

	// 注册路由（Go 1.22+ 支持 METHOD /path 模式）
	mux.HandleFunc("POST /v1/proxies/import/text", handlers.HandleImportText)
	mux.HandleFunc("POST /v1/proxies/import/file", handlers.HandleImportFile)
	mux.HandleFunc("POST /v1/proxies/test", handlers.HandleTest)
	mux.HandleFunc("GET /v1/proxies/next", handlers.HandleNext)
	mux.HandleFunc("POST /v1/proxies/report", handlers.HandleReport)

	// CRUD 路由（注意：/stats 需在 /{id} 之前注册）
	mux.HandleFunc("GET /v1/proxies/stats", handlers.HandleGetStats)
	mux.HandleFunc("GET /v1/proxies", handlers.HandleListProxies)
	mux.HandleFunc("GET /v1/proxies/{id}", handlers.HandleGetProxy)
	mux.HandleFunc("DELETE /v1/proxies/{id}", handlers.HandleDeleteProxy)
	mux.HandleFunc("DELETE /v1/proxies", handlers.HandleBulkDeleteProxies)
	mux.HandleFunc("PATCH /v1/proxies/{id}", handlers.HandleUpdateProxy)
	mux.HandleFunc("POST /v1/proxies/{id}/test", handlers.HandleTestSingleProxy)

	// 健康检查
	mux.HandleFunc("GET /health", func(w http.ResponseWriter, r *http.Request) {
		w.WriteHeader(http.StatusOK)
		w.Write([]byte(`{"status":"ok"}`))
	})

	// 应用中间件
	var handler http.Handler = mux
	handler = AuthMiddleware(handler, cfg.APIKey)
	handler = LoggingMiddleware(handler)

	return handler
}
