using MediatR;
using TakeoutSaaS.Application.App.Billings.Contracts;
using TakeoutSaaS.Domain.Billings.Enums;
using TakeoutSaaS.Shared.Abstractions.Results;

namespace TakeoutSaaS.Application.App.Billings.Queries;

/// <summary>
/// 获取账单列表查询。
/// </summary>
public sealed record ListBillingsQuery : IRequest<PagedResult<BillingListDto>>
{
    /// <summary>
    /// 租户 ID。
    /// </summary>
    public long? TenantId { get; init; }

    /// <summary>
    /// 账单状态。
    /// </summary>
    public TenantBillingStatus? Status { get; init; }

    /// <summary>
    /// 账单类型。
    /// </summary>
    public TenantBillingType? BillingType { get; init; }

    /// <summary>
    /// 开始日期。
    /// </summary>
    public DateTime? StartDate { get; init; }

    /// <summary>
    /// 结束日期。
    /// </summary>
    public DateTime? EndDate { get; init; }

    /// <summary>
    /// 最小金额。
    /// </summary>
    public decimal? MinAmount { get; init; }

    /// <summary>
    /// 最大金额。
    /// </summary>
    public decimal? MaxAmount { get; init; }

    /// <summary>
    /// 关键词（账单号、租户名）。
    /// </summary>
    public string? Keyword { get; init; }

    /// <summary>
    /// 排序字段。
    /// </summary>
    public string? SortBy { get; init; }

    /// <summary>
    /// 是否降序。
    /// </summary>
    public bool? SortDesc { get; init; }

    /// <summary>
    /// 页码（从 1 开始）。
    /// </summary>
    public int PageNumber { get; init; } = 1;

    /// <summary>
    /// 每页条数。
    /// </summary>
    public int PageSize { get; init; } = 10;
}
