using FutureMailAPI.DTOs;
using FutureMailAPI.Models;

namespace FutureMailAPI.Services
{
    public interface IMailService
    {
        Task<ApiResponse<SentMailResponseDto>> CreateMailAsync(int userId, SentMailCreateDto createDto);
        Task<ApiResponse<SentMailResponseDto>> GetSentMailByIdAsync(int userId, int mailId);
        Task<ApiResponse<PagedResponse<SentMailResponseDto>>> GetSentMailsAsync(int userId, MailListQueryDto queryDto);
        Task<ApiResponse<SentMailResponseDto>> GetMailByIdAsync(int userId, int mailId);
        Task<ApiResponse<PagedResponse<SentMailResponseDto>>> GetMailsAsync(int userId, MailListQueryDto queryDto);
        Task<ApiResponse<SentMailResponseDto>> UpdateMailAsync(int userId, int mailId, SentMailUpdateDto updateDto);
        Task<ApiResponse<bool>> DeleteMailAsync(int userId, int mailId);
        Task<ApiResponse<PagedResponse<ReceivedMailResponseDto>>> GetReceivedMailsAsync(int userId, MailListQueryDto queryDto);
        Task<ApiResponse<ReceivedMailResponseDto>> GetReceivedMailByIdAsync(int userId, int mailId);
        Task<ApiResponse<bool>> MarkReceivedMailAsReadAsync(int userId, int mailId);
        Task<ApiResponse<bool>> MarkAsReadAsync(int userId, int mailId);
        Task<ApiResponse<bool>> RevokeMailAsync(int userId, int mailId);
    }
}