package object

import (
	"api_yal/internal/logger"
	"api_yal/internal/middleware"
	"api_yal/internal/repository"

	"github.com/go-chi/chi/v5"
	"gorm.io/gorm"
)

// RegisterRoutes регистрирует маршруты для работы с объектами
func RegisterRoutes(r chi.Router, db *gorm.DB, jwtSecret string) {
	l := logger.Get()
	l.Debug("Регистрация маршрутов объектов")
	
	objectRepo := repository.NewObjectRepository(db)
	objectService := NewObjectService(objectRepo)
	objectHandler := NewObjectHandler(objectService)

	// Публичные маршруты (не требуют аутентификации)
	r.Group(func(r chi.Router) {
		r.Get("/objects", objectHandler.ListObjects)
		r.Get("/objects/search", objectHandler.SearchObjects)
		r.Get("/objects/nearby", objectHandler.GetNearbyObjects)
		r.Get("/objects/{id}", objectHandler.GetObjectByID)
		r.Get("/objects/owner/{ownerId}", objectHandler.GetObjectsByOwner)
	})

	// Защищенные маршруты (требуют аутентификации)
	r.Group(func(r chi.Router) {
		r.Use(middleware.AuthMiddleware(jwtSecret))
		
		// CRUD для объектов
		r.Post("/objects", objectHandler.CreateObject)
		r.Put("/objects/{id}", objectHandler.UpdateObject)
		r.Delete("/objects/{id}", objectHandler.DeleteObject)
		
		// Отзывы
		r.Post("/objects/{id}/feedbacks", objectHandler.CreateFeedback)
		
		// Рейтинги
		r.Post("/objects/{id}/ratings", objectHandler.CreateRatingVote)
	})

	l.Debug("Маршруты объектов зарегистрированы")
}