using ROLAC.API.DTOs.Giving;
using ROLAC.API.DTOs.Shared;

namespace ROLAC.API.Services;

public interface IOfferingSessionService
{
    Task<PagedResult<OfferingSessionListItemDto>> GetPagedAsync(
        int page, int pageSize, DateOnly? from, DateOnly? to);
    Task<OfferingSessionDto?> GetByIdAsync(int id);
    Task<bool> DateExistsAsync(DateOnly date);
    Task<int>  CreateAsync(CreateOfferingSessionRequest request);
    Task       ReopenAsync(int id);
    Task       ReplaceAsync(int id, CreateOfferingSessionRequest request);

    // ── Mobile offering entry (anonymous, one line at a time) ────────────────
    Task<OfferingEntrySummaryDto>   GetEntrySummaryAsync(DateOnly date);
    Task<OfferingEntryLineAddedDto> AppendLineAsync(DateOnly date, OfferingGivingLineRequest line);
    Task<List<MemberTypeaheadDto>>  SearchMembersForEntryAsync(string? search, int take);

    Task SaveProofAsync(int id, Stream content, string fileName);
    Task<(Stream stream, string contentType)?> OpenProofAsync(int id);
    Task DeleteProofAsync(int id);

    // Date-keyed variants for the anonymous mobile page (knows the date, not the id).
    Task SaveProofForDateAsync(DateOnly date, Stream content, string fileName);
    Task<(Stream stream, string contentType)?> OpenProofForDateAsync(DateOnly date);
}
