namespace SIGCM2.Application.Pricing.ChargeableChars;

/// <summary>
/// PRC-001 — Application service for resolving active chargeable-char config for a ProductType.
///
/// Priority rule: per-ProductType row overrides global (ProductTypeId IS NULL) for the same Symbol.
/// Returns a dictionary keyed by Symbol for O(1) lookup during word-count pricing.
/// </summary>
public interface IChargeableCharConfigService
{
    /// <summary>
    /// Returns the resolved active config for the given ProductType as of the given date.
    /// Per-ProductType rows take priority over global rows for the same Symbol.
    /// Global rows are used as fallback when no per-ProductType row exists for that Symbol.
    /// Returns an empty dictionary if no config exists at all.
    /// </summary>
    Task<IReadOnlyDictionary<string, ChargeableCharSnapshot>> GetActiveConfigForProductTypeAsync(
        long productTypeId,
        DateOnly asOf,
        CancellationToken ct = default);
}
