using CMSMicroservice.Application.Common.Models;
using CMSMicroservice.Domain.Enums;

namespace CMSMicroservice.Application.UserOrderCQ.Queries.GetOrdersByDateRange;

/// <summary>
/// دریافت سفارشات بر اساس بازه زمانی
/// </summary>
public record GetOrdersByDateRangeQuery : IRequest<GetOrdersByDateRangeResponseDto>
{
    /// <summary>
    /// تاریخ شروع (UTC)
    /// </summary>
    public DateTime StartDate { get; init; }

    /// <summary>
    /// تاریخ پایان (UTC)
    /// </summary>
    public DateTime EndDate { get; init; }

    /// <summary>
    /// فیلتر وضعیت تحویل (اختیاری)
    /// </summary>
    public DeliveryStatus? Status { get; init; }

    /// <summary>
    /// شناسه کاربر (اختیاری - برای فیلتر بر اساس کاربر)
    /// </summary>
    public long? UserId { get; init; }

    /// <summary>
    /// شماره صفحه
    /// </summary>
    public int PageIndex { get; init; } = 1;

    /// <summary>
    /// تعداد در صفحه
    /// </summary>
    public int PageSize { get; init; } = 20;
}

/// <summary>
/// پاسخ لیست سفارشات
/// </summary>
public class GetOrdersByDateRangeResponseDto
{
    public MetaData MetaData { get; set; } = new();
    public List<OrderSummaryDto> Orders { get; set; } = new();
}

/// <summary>
/// خلاصه اطلاعات سفارش
/// </summary>
public class OrderSummaryDto
{
    public long Id { get; set; }
    public long UserId { get; set; }
    public string UserFullName { get; set; } = string.Empty;
    public long Amount { get; set; }
    public long DiscountedPrice { get; set; }
    public DeliveryStatus Status { get; set; }
    public DateTime Created { get; set; }
    public DateTime? ShippedAt { get; set; }
    public DateTime? DeliveredAt { get; set; }
    public int ItemsCount { get; set; }
}
