package dev.lions.unionflow.server.repository;

import dev.lions.unionflow.server.entity.ConversationParticipant;
import io.quarkus.hibernate.orm.panache.PanacheRepositoryBase;
import jakarta.enterprise.context.ApplicationScoped;
import java.util.List;
import java.util.Optional;
import java.util.UUID;

/**
 * Repository pour les participants aux conversations.
 *
 * @author UnionFlow Team
 * @version 4.0
 * @since 2026-04-13
 */
@ApplicationScoped
public class ConversationParticipantRepository
    implements PanacheRepositoryBase<ConversationParticipant, UUID> {

    /**
     * Trouve la participation d'un membre à une conversation.
     */
    public Optional<ConversationParticipant> findParticipant(UUID conversationId, UUID membreId) {
        return find("conversation.id = ?1 AND membre.id = ?2 AND actif = true",
            conversationId, membreId
        ).firstResultOptional();
    }

    /**
     * Liste tous les participants actifs d'une conversation.
     */
    public List<ConversationParticipant> findByConversation(UUID conversationId) {
        return find("conversation.id = ?1 AND actif = true", conversationId).list();
    }

    /**
     * Vérifie si un membre est participant à une conversation.
     */
    public boolean estParticipant(UUID conversationId, UUID membreId) {
        return count("conversation.id = ?1 AND membre.id = ?2 AND actif = true",
            conversationId, membreId) > 0;
    }
}
