package feetback

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

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

func RegisterRoutes(r chi.Router, db *gorm.DB, jwtSecret string) {
	l := logger.Get()
	l.Info("Registering routes for feetback")

	feedbackRepo := repository.NewFeedbackRepository(db)
	feedbackService := NewFeedbackServiceImpl(feedbackRepo, db)
	feedbackHandler := NewFeedbackHandler(feedbackService)

	// Группируем маршруты для отзывов
	r.Route("/feedbacks", func(r chi.Router) {
		// Публичные маршруты (не требуют аутентификации)
		r.Get("/", feedbackHandler.ListFeedbacks)
		r.Get("/search", feedbackHandler.SearchFeedbacks)
		r.Get("/stats", feedbackHandler.GetFeedbackStats) // Новый эндпоинт
		r.Get("/{id}", feedbackHandler.GetFeedbackByID)
		r.Get("/object/{objectID}", feedbackHandler.GetFeedbacksByObject)
		r.Get("/platform/{platform}", feedbackHandler.GetFeedbacksByPlatform)
		r.Get("/{id}/comments", feedbackHandler.GetFeedbackComments)
		
		// Защищенные маршруты (требуют аутентификации)
		r.Group(func(r chi.Router) {
			r.Use(middleware.AuthMiddleware(jwtSecret))
			
			r.Post("/", feedbackHandler.CreateFeedback)
			r.Put("/{id}", feedbackHandler.UpdateFeedback)
			r.Delete("/{id}", feedbackHandler.DeleteFeedback)
			r.Get("/my", feedbackHandler.GetMyFeedbacks)
			
			// Маршруты для комментариев
			r.Post("/{id}/comments", feedbackHandler.AddComment)
			r.Put("/{id}/comments/{commentID}", feedbackHandler.UpdateComment)
			r.Delete("/{id}/comments/{commentID}", feedbackHandler.DeleteComment)
		})
	})
}