package repository

import (
	"api_yal/internal/models"
)

// CommentRepository интерфейс для операций с моделью Comment
//go:generate mockgen -destination=mocks/comment_repository.go -package=mocks . CommentRepository
type CommentRepository interface {
	// Create создает новый комментарий
	Create(comment *models.Comment) error

	// GetByID возвращает комментарий по ID
	GetByID(id uint) (*models.Comment, error)

	// Update обновляет существующий комментарий
	Update(comment *models.Comment) error

	// Delete помечает комментарий как удаленный
	Delete(id uint) error

	// List возвращает список комментариев с пагинацией
	List(offset, limit int) ([]models.Comment, error)

	// Count возвращает общее количество комментариев
	Count() (int64, error)

	// ListByFeedback возвращает комментарии по отзыву
	ListByFeedback(feedbackID uint, offset, limit int) ([]models.Comment, error)

	// ListByAuthor возвращает комментарии по автору
	ListByAuthor(authorID uint, offset, limit int) ([]models.Comment, error)

	// ListReplies возвращает ответы на комментарий
	ListReplies(parentID uint, offset, limit int) ([]models.Comment, error)

	// GetAuthor возвращает автора комментария
	GetAuthor(commentID uint) (*models.Account, error)

	// GetFeedback возвращает отзыв, к которому относится комментарий
	GetFeedback(commentID uint) (*models.Feedback, error)

	// GetParent возвращает родительский комментарий
	GetParent(commentID uint) (*models.Comment, error)

	// GetRepliesCount возвращает количество ответов на комментарий
	GetRepliesCount(commentID uint) (int64, error)

	// MarkAsEdited помечает комментарий как отредактированный
	MarkAsEdited(id uint) error

	// ToggleVerification переключает статус верификации комментария
	ToggleVerification(id uint, verified bool) error

	
}