using MediatR;
using PromotionService.API.Application.DTOs;

namespace PromotionService.API.Application.Queries;

/// <summary>
/// EN: Query to get a campaign by ID.
/// VI: Query để lấy chiến dịch theo ID.
/// </summary>
public record GetCampaignQuery(Guid CampaignId) : IRequest<CampaignDto?>;

/// <summary>
/// EN: Query to get campaigns by merchant.
/// VI: Query để lấy chiến dịch theo merchant.
/// </summary>
public record GetCampaignsQuery(Guid? MerchantId = null, bool ActiveOnly = false) : IRequest<IEnumerable<CampaignSummaryDto>>;

/// <summary>
/// EN: Query to get campaign statistics.
/// VI: Query để lấy thống kê chiến dịch.
/// </summary>
public record GetCampaignStatisticsQuery(Guid CampaignId) : IRequest<CampaignStatisticsDto?>;

/// <summary>
/// EN: Query to validate a voucher code.
/// VI: Query để xác thực mã voucher.
/// </summary>
public record ValidateVoucherQuery(string VoucherCode, Guid UserId) : IRequest<VoucherValidationDto>;

/// <summary>
/// EN: Query to get user's vouchers.
/// VI: Query để lấy voucher của người dùng.
/// </summary>
public record GetUserVouchersQuery(Guid UserId) : IRequest<IEnumerable<VoucherSummaryDto>>;
