namespace ytLive.Models;
/// YPP eligibility thresholds as versioned, date-aware DATA — never
/// constants (ai.md "Journey tracker"). Tier 1 (fan funding) is time-invariant;
/// Tier 2 (ad revenue) doubles its long-form-hours and Shorts-view bars for NEW
/// applicants after 2027-02-01. Hardcoding the pre-2027 numbers would show the
/// wrong ETA once the doubling lands, so callers resolve the active Tier 2
/// threshold through .
public static class YppThresholds
{
public sealed record TierThreshold(string Name, long Subscribers, long WatchHours, long ShortsViews);
/// The date the Tier-2 ad-revenue bars double for new applicants.
public static readonly DateTime Tier2DoublingDate = new(2027, 2, 1);
/// Fan-funding tier (before the full ad/YouTube Premium revenue tier).
public static TierThreshold Tier1 { get; } = new("Fan funding", 500, 3_000, 3_000_000);
/// The Tier-2 bar for a given point in time — 4,000h / 10M Shorts
/// before the doubling date, 8,000h / 20M Shorts on or after it.
public static TierThreshold Tier2For(DateTime when) => when >= Tier2DoublingDate
? new TierThreshold("Ad revenue", 1_000, 8_000, 20_000_000)
: new TierThreshold("Ad revenue", 1_000, 4_000, 10_000_000);
/// The currently-active Tier-2 threshold (resolved against today).
public static TierThreshold Tier2Now => Tier2For(DateTime.UtcNow);
/// Valid public long-form uploads required in the trailing 90 days
/// to keep each tier route eligible.
public const int UploadsRequiredPer90Days = 3;
}