using MediatR;

namespace AdsServingService.API.Application.Queries;

/// <summary>
/// EN: Query to serve an ad based on user context and placement.
/// VI: Query để serve quảng cáo dựa trên ngữ cảnh người dùng và vị trí.
/// </summary>
public record ServeAdQuery : IRequest<ServedAdDto?>
{
    public Guid UserId { get; init; }
    public string PlacementType { get; init; } = null!; // "feed", "story", "banner"
    public Dictionary<string, string> UserContext { get; init; } = new();
}

/// <summary>
/// EN: DTO for served ad response.
/// VI: DTO cho response quảng cáo được serve.
/// </summary>
public record ServedAdDto
{
    public Guid AdId { get; init; }
    public Guid CampaignId { get; init; }
    public string AdFormat { get; init; } = null!;
    public string? Headline { get; init; }
    public string? PrimaryText { get; init; }
    public string? CallToAction { get; init; }
    public string? CreativeUrl { get; init; }
    public string? DestinationUrl { get; init; }
    public decimal FinalPrice { get; init; }
    public DateTime ServedAt { get; init; }
}
