package comment

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 comment")

	commentRepo := repository.NewCommentRepository(db)
	commentService := NewCommentServiceImpl(commentRepo, db)
	commentHandler := NewCommentHandler(commentService)

	// Группируем маршруты для комментариев
	r.Route("/comments", func(r chi.Router) {
		// Публичные маршруты (не требуют аутентификации)
		r.Get("/", commentHandler.ListComments)
		r.Get("/stats", commentHandler.GetCommentStats)
		r.Get("/{id}", commentHandler.GetCommentByID)
		r.Get("/feedback/{feedbackID}", commentHandler.GetCommentsByFeedback)
		r.Get("/replies/{parentID}", commentHandler.GetReplies)
		
		// Защищенные маршруты (требуют аутентификации)
		r.Group(func(r chi.Router) {
			r.Use(middleware.AuthMiddleware(jwtSecret))
			
			r.Post("/", commentHandler.CreateComment)
			r.Put("/{id}", commentHandler.UpdateComment)
			r.Delete("/{id}", commentHandler.DeleteComment)
			r.Get("/my", commentHandler.GetMyComments)
			
			// Маршруты для админов
			r.Group(func(r chi.Router) {
				r.Use(middleware.AdminOnlyMiddleware)
				r.Put("/{id}/verify", commentHandler.VerifyComment)
			})
		})
	})
}