// Package api provides HTTP routing and handlers for the preferences-api service.
package api

import (
	"git.threesix.ai/jordan/slack5-1770606136/pkg/app"
	"git.threesix.ai/jordan/slack5-1770606136/services/preferences-api/internal/api/handlers"
	"git.threesix.ai/jordan/slack5-1770606136/services/preferences-api/internal/service"
)

// RegisterRoutes registers all HTTP routes for the service.
// Routes are mounted under /api/preferences-api to match the ingress path routing.
// This allows the monorepo to expose multiple services under a single domain:
//   - https://domain/api/preferences-api/health
//   - https://domain/api/preferences-api/preferences/{user_id}
func RegisterRoutes(application *app.App, prefService *service.PreferenceService) {
	logger := application.Logger()

	// Initialize handlers with injected services
	healthHandler := handlers.NewHealth(logger)
	prefHandler := handlers.NewPreference(prefService, logger)

	// Build and mount OpenAPI spec
	spec := NewServiceSpec()
	application.EnableDocs(spec)

	// Register API routes under /api/{service-name} to match ingress path routing.
	// The ingress routes /api/preferences-api/* to this service.
	application.Route("/api/preferences-api", func(r app.Router) {
		r.Get("/health", healthHandler.Check)

		// Preference routes (auth out of scope per spec; can be layered on later)
		r.Get("/preferences/{user_id}", app.Wrap(prefHandler.Get))
		r.Put("/preferences/{user_id}", app.Wrap(prefHandler.Upsert))
	})
}
