package de.oaa.xxx.gruppe.repository;

import de.oaa.xxx.gruppe.entity.GruppenbeitragEntity;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Slice;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.transaction.annotation.Transactional;

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

public interface GruppenbeitragRepository extends JpaRepository<GruppenbeitragEntity, UUID> {

    Slice<GruppenbeitragEntity> findByGruppeIdOrderByCreatedAtDesc(UUID gruppeId, Pageable pageable);

    List<GruppenbeitragEntity> findByGruppeIdOrderByCreatedAtDesc(UUID gruppeId);

    Optional<GruppenbeitragEntity> findFirstByGruppeIdOrderByCreatedAtDesc(UUID gruppeId);

    List<GruppenbeitragEntity> findByGruppeIdInAndCreatedAtAfterOrderByCreatedAtDesc(List<UUID> gruppeIds, LocalDateTime since);

    @Query("SELECT b.gruppeId, MAX(b.createdAt) FROM GruppenbeitragEntity b WHERE b.gruppeId IN :gruppeIds GROUP BY b.gruppeId")
    List<Object[]> findLatestCreatedAtByGruppeIds(@Param("gruppeIds") List<UUID> gruppeIds);

    @Transactional
    void deleteByGruppeId(UUID gruppeId);

    @Transactional
    void deleteByAuthorId(UUID authorId);
}
