package repository

import (
	"api_yal/internal/models"
)

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

	// GetByID возвращает аккаунт по ID
	GetByID(id uint) (*models.Account, error)

	// GetByEmail возвращает аккаунт по email
	GetByEmail(email string) (*models.Account, error)

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

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

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

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

	// Search находит аккаунты по email или полному имени
	Search(query string, offset, limit int) ([]models.Account, error)

	// GetObjects возвращает все объекты, принадлежащие аккаунту
	GetObjects(accountID uint) ([]models.Object, error)
	
	// CreatePasswordReset создаёт новую запись о сбросе пароля
	CreatePasswordReset(reset *models.PasswordReset) error

	// GetPasswordResetByToken находит запись о сбросе пароля по токену
	GetPasswordResetByToken(token string) (*models.PasswordReset, error)

	// UpdatePasswordReset обновляет запись о сбросе пароля
	UpdatePasswordReset(reset *models.PasswordReset) error
}