namespace Svrnty.CQRS.Altcha.Abstractions;
///
/// Resolves a per-request PoW complexity (search-space upper bound) for the
/// next Altcha challenge the server will mint. Implementations may consult
/// per-actor signals — repeat-offender counters, threat-intel headers,
/// reputation scores — to scale difficulty up for suspicious actors while
/// keeping the baseline cheap for everyone else.
///
///
/// The framework ships a no-op that
/// always returns null, meaning "use the upstream service's configured
/// default complexity." Applications opt into adaptive difficulty by
/// replacing the registration with their own implementation; consult request
/// context via
/// or scoped DI.
///
public interface IAltchaDifficultyAdvisor
{
///
/// Returns the desired maxNumber (PoW search-space upper bound)
/// for the next challenge, or null to defer to the upstream
/// service default. The Altcha server clamps to its configured min/max,
/// so callers don't need to enforce bounds here.
///
Task GetComplexityAsync(CancellationToken cancellationToken = default);
}