// EN: Query to get a list of products.
// VI: Query để lấy danh sách sản phẩm.

using MediatR;
using CatalogService.API.Application.DTOs;

namespace CatalogService.API.Application.Queries;

/// <summary>
/// EN: Query to get products by shop with filtering and pagination.
/// VI: Query để lấy sản phẩm theo shop có lọc và phân trang.
/// </summary>
public record GetProductsQuery : IRequest<PagedResult<ProductDto>>
{
    /// <summary>
    /// EN: Shop ID to filter products.
    /// VI: ID shop để lọc sản phẩm.
    /// </summary>
    public Guid ShopId { get; init; }

    /// <summary>
    /// EN: Filter by active status (null = all).
    /// VI: Lọc theo trạng thái hoạt động (null = tất cả).
    /// </summary>
    public bool? IsActive { get; init; }

    /// <summary>
    /// EN: Filter by product type (null = all).
    /// VI: Lọc theo loại sản phẩm (null = tất cả).
    /// </summary>
    public string? Type { get; init; }

    /// <summary>
    /// EN: Filter by category ID (null = all).
    /// VI: Lọc theo danh mục (null = tất cả).
    /// </summary>
    public Guid? CategoryId { get; init; }

    /// <summary>
    /// EN: Page number (1-indexed).
    /// VI: Số trang (bắt đầu từ 1).
    /// </summary>
    public int Page { get; init; } = 1;

    /// <summary>
    /// EN: Page size.
    /// VI: Kích thước trang.
    /// </summary>
    public int PageSize { get; init; } = 20;
}
