package com.unicorn.hgzero.meeting.biz.usecase.out;

import com.unicorn.hgzero.meeting.biz.domain.Meeting;

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

/**
 * 회의 조회 Gateway Interface (Out Port)
 */
public interface MeetingReader {

    /**
     * ID로 회의 조회
     */
    Optional<Meeting> findById(String meetingId);

    /**
     * 주최자 ID로 회의 목록 조회
     */
    List<Meeting> findByOrganizerId(String organizerId);

    /**
     * 상태로 회의 목록 조회
     */
    List<Meeting> findByStatus(String status);

    /**
     * 주최자 ID와 상태로 회의 목록 조회
     */
    List<Meeting> findByOrganizerIdAndStatus(String organizerId, String status);

    /**
     * 일정 시간 범위로 회의 목록 조회
     */
    List<Meeting> findByScheduledTimeBetween(LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 템플릿 ID로 회의 목록 조회
     */
    List<Meeting> findByTemplateId(String templateId);

    /**
     * 주최자의 특정 시간대 중복 회의 개수 조회
     *
     * @param organizerId 주최자 ID
     * @param startTime 회의 시작 시간
     * @param endTime 회의 종료 시간
     * @return 중복 회의 개수
     */
    long countConflictingMeetings(String organizerId, LocalDateTime startTime, LocalDateTime endTime);
}
