package repository

import (
	"api_yal/internal/models"
)

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

	// GetByID возвращает отзыв по ID
	GetByID(id uint) (*models.Feedback, error)

	// Update обновляет существующий отзыв
	Update(feedback *models.Feedback) error

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

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

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

	// ListByOwner возвращает отзывы по владельцу
	ListByOwner(ownerID uint, offset, limit int) ([]models.Feedback, error)

	// ListByObject возвращает отзывы по объекту
	ListByObject(objectID uint, offset, limit int) ([]models.Feedback, error)

	// ListByPlatform возвращает отзывы по платформе
	ListByPlatform(platform models.PlatformType, offset, limit int) ([]models.Feedback, error)

	// GetOwner возвращает владельца отзыва
	GetOwner(feedbackID uint) (*models.Account, error)

	// GetObject возвращает объект, к которому относится отзыв
	GetObject(feedbackID uint) (*models.Object, error)

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

	// GetCommentCount возвращает количество комментариев к отзыву
	GetCommentCount(feedbackID uint) (int, error)

	// UpdateCommentCount обновляет количество комментариев у отзыва
	UpdateCommentCount(feedbackID uint, count int) error

	// Search находит отзывы по тексту
	Search(query string, offset, limit int) ([]models.Feedback, error)
	
}
