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

namespace CMSMicroservice.Application.DiscountShopCQ.Queries.GetAllDiscountOrders;

/// <summary>
/// کوئری دریافت همه سفارشات فروشگاه تخفیفی برای ادمین
/// </summary>
public class GetAllDiscountOrdersQuery : IRequest<GetAllDiscountOrdersResponseDto>
{
    public PaginationState? PaginationQuery { get; set; }
    
    /// <summary>
    /// فیلتر بر اساس شناسه کاربر
    /// </summary>
    public long? UserId { get; set; }
    
    /// <summary>
    /// فیلتر بر اساس وضعیت پرداخت
    /// </summary>
    public PaymentStatus? PaymentStatus { get; set; }
    
    /// <summary>
    /// فیلتر بر اساس وضعیت ارسال
    /// </summary>
    public DeliveryStatus? DeliveryStatus { get; set; }
    
    /// <summary>
    /// جستجو بر اساس موبایل کاربر
    /// </summary>
    public string? UserMobile { get; set; }
    
    /// <summary>
    /// جستجو بر اساس کد رهگیری
    /// </summary>
    public string? TrackingCode { get; set; }
    
    /// <summary>
    /// فیلتر از تاریخ
    /// </summary>
    public DateTime? FromDate { get; set; }
    
    /// <summary>
    /// فیلتر تا تاریخ
    /// </summary>
    public DateTime? ToDate { get; set; }
    
    /// <summary>
    /// حداقل مبلغ سفارش
    /// </summary>
    public long? MinAmount { get; set; }
    
    /// <summary>
    /// حداکثر مبلغ سفارش
    /// </summary>
    public long? MaxAmount { get; set; }
}

public class GetAllDiscountOrdersResponseDto
{
    public MetaData MetaData { get; set; } = new();
    public List<AdminOrderDto> Models { get; set; } = new();
}

public class AdminOrderDto
{
    public long Id { get; set; }
    
    // اطلاعات کاربر
    public long UserId { get; set; }
    public string UserFullName { get; set; } = string.Empty;
    public string UserMobile { get; set; } = string.Empty;
    
    // مبالغ
    public long TotalAmount { get; set; }
    public long DiscountBalanceUsed { get; set; }
    public long GatewayAmountPaid { get; set; }
    public long VatAmount { get; set; }
    
    // وضعیت ها
    public PaymentStatus PaymentStatus { get; set; }
    public DateTime? PaymentDate { get; set; }
    public DeliveryStatus DeliveryStatus { get; set; }
    public DateTime? DeliveryDate { get; set; }
    
    // آدرس تحویل
    public string? ShippingAddress { get; set; }
    public string? ReceiverName { get; set; }
    public string? ReceiverMobile { get; set; }
    
    // رهگیری
    public string? TrackingCode { get; set; }
    public string? AdminNote { get; set; }
    
    // تاریخ ها
    public DateTime Created { get; set; }
    public DateTime? LastModified { get; set; }
    
    // تعداد آیتم ها
    public int ItemsCount { get; set; }
}
