using TakeoutSaaS.Domain.Tenants.Entities;

namespace TakeoutSaaS.Domain.Tenants.Services;

/// <summary>
/// 账单导出服务接口。
/// </summary>
public interface IBillingExportService
{
    /// <summary>
    /// 导出为 Excel（XLSX）。
    /// </summary>
    /// <param name="billings">账单数据。</param>
    /// <param name="cancellationToken">取消标记。</param>
    /// <returns>文件字节数组。</returns>
    Task<byte[]> ExportToExcelAsync(IReadOnlyList<TenantBillingStatement> billings, CancellationToken cancellationToken = default);

    /// <summary>
    /// 导出为 PDF。
    /// </summary>
    /// <param name="billings">账单数据。</param>
    /// <param name="cancellationToken">取消标记。</param>
    /// <returns>文件字节数组。</returns>
    Task<byte[]> ExportToPdfAsync(IReadOnlyList<TenantBillingStatement> billings, CancellationToken cancellationToken = default);

    /// <summary>
    /// 导出为 CSV。
    /// </summary>
    /// <param name="billings">账单数据。</param>
    /// <param name="cancellationToken">取消标记。</param>
    /// <returns>文件字节数组。</returns>
    Task<byte[]> ExportToCsvAsync(IReadOnlyList<TenantBillingStatement> billings, CancellationToken cancellationToken = default);
}
