package de.oaa.xxx.games.common.repository;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import de.oaa.xxx.games.common.entity.AufgabenGruppeEntity;
import de.oaa.xxx.games.common.entity.GruppenAboEntity;

import java.util.List;
import java.util.UUID;

public interface GruppenAboRepository extends JpaRepository<GruppenAboEntity, UUID> {

    List<GruppenAboEntity> findByUserId(UUID userId);

    boolean existsByUserIdAndAufgabenGruppe(UUID userId, AufgabenGruppeEntity gruppe);

    void deleteByUserIdAndAufgabenGruppe(UUID userId, AufgabenGruppeEntity gruppe);

    long countByAufgabenGruppe(AufgabenGruppeEntity gruppe);

    void deleteByAufgabenGruppe(AufgabenGruppeEntity gruppe);

    @Query(value = "SELECT a FROM GruppenAboEntity a JOIN a.aufgabenGruppe g WHERE a.userId = :userId AND g.privateGruppe = false AND (g.aufgaben IS NOT EMPTY OR g.finisher IS NOT EMPTY)",
           countQuery = "SELECT COUNT(a) FROM GruppenAboEntity a JOIN a.aufgabenGruppe g WHERE a.userId = :userId AND g.privateGruppe = false AND (g.aufgaben IS NOT EMPTY OR g.finisher IS NOT EMPTY)")
    Page<GruppenAboEntity> findByUserIdWithContent(@Param("userId") UUID userId, Pageable pageable);
}
