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

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

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

/**
 * Todo 조회 Gateway Interface (Out Port)
 */
public interface TodoReader {

    /**
     * ID로 Todo 조회
     */
    Optional<Todo> findById(String todoId);

    /**
     * 회의 ID로 Todo 목록 조회
     */
    List<Todo> findByMeetingId(String meetingId);

    /**
     * 회의록 ID로 Todo 목록 조회
     */
    List<Todo> findByMinutesId(String minutesId);

    /**
     * 담당자 ID로 Todo 목록 조회
     */
    List<Todo> findByAssigneeId(String assigneeId);

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

    /**
     * 담당자 ID와 상태로 Todo 목록 조회
     */
    List<Todo> findByAssigneeIdAndStatus(String assigneeId, String status);

    /**
     * 마감일로 Todo 목록 조회
     */
    List<Todo> findByDueDate(LocalDate dueDate);

    /**
     * 마감일 이전 Todo 목록 조회
     */
    List<Todo> findByDueDateBefore(LocalDate date);

    /**
     * 우선순위로 Todo 목록 조회
     */
    List<Todo> findByPriority(String priority);

    /**
     * 담당자 ID와 마감일 범위로 Todo 목록 조회
     */
    List<Todo> findByAssigneeIdAndDueDateBetween(String assigneeId, LocalDate startDate, LocalDate endDate);
}
