package kz.konturai.parser.repository;

import kz.konturai.parser.model.MarketItem;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.stereotype.Repository;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;

@Repository
public interface MarketItemRepository extends MongoRepository<MarketItem, String> {

    /**
     * Найти запись по хэшу для дедупликации
     */
    Optional<MarketItem> findByHash(String hash);

    /**
     * Проверить существование записи по хэшу
     */
    boolean existsByHash(String hash);

    /**
     * Найти записи по источнику с пагинацией
     */
    Page<MarketItem> findBySourceName(String sourceName, Pageable pageable);

    /**
     * Найти все записи по источнику без пагинации
     */
    List<MarketItem> findBySourceName(String sourceName);

    /**
     * Найти записи по диапазону дат с пагинацией
     */
    Page<MarketItem> findByPublishedAtBetween(LocalDateTime startDate, LocalDateTime endDate, Pageable pageable);

    /**
     * Подсчитать записи по источнику
     */
    long countBySourceName(String sourceName);

    /**
     * Получить все уникальные названия источников
     */
    @Query(value = "{}", fields = "{'sourceName': 1}")
    List<MarketItem> findDistinctSourceNames();

    /**
     * Найти записи по источнику и диапазону дат
     */
    Page<MarketItem> findBySourceNameAndPublishedAtBetween(String sourceName,
            LocalDateTime startDate,
            LocalDateTime endDate,
            Pageable pageable);
}
