package com.unicorn.hgzero.meeting.infra.gateway.repository;

import com.unicorn.hgzero.meeting.infra.gateway.entity.MeetingParticipantEntity;
import com.unicorn.hgzero.meeting.infra.gateway.entity.MeetingParticipantId;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 회의 참석자 JPA Repository
 */
@Repository
public interface MeetingParticipantJpaRepository extends JpaRepository<MeetingParticipantEntity, MeetingParticipantId> {

    /**
     * 회의 ID로 참석자 목록 조회
     */
    List<MeetingParticipantEntity> findByMeetingId(String meetingId);

    /**
     * 사용자 ID로 참여 회의 목록 조회
     */
    List<MeetingParticipantEntity> findByUserId(String userId);

    /**
     * 회의 ID와 초대 상태로 참석자 목록 조회
     */
    List<MeetingParticipantEntity> findByMeetingIdAndInvitationStatus(String meetingId, String invitationStatus);

    /**
     * 회의 ID로 참석자 전체 삭제
     */
    @Modifying
    @Query("DELETE FROM MeetingParticipantEntity p WHERE p.meetingId = :meetingId")
    void deleteByMeetingId(@Param("meetingId") String meetingId);

    /**
     * 회의 ID와 사용자 ID로 참석자 존재 여부 확인
     */
    boolean existsByMeetingIdAndUserId(String meetingId, String userId);

    /**
     * 회의 ID로 참석자 수 조회 (모든 참석자)
     */
    int countByMeetingId(String meetingId);
}
