#import <Foundation/Foundation.h>
#import "TQWarmupManifest.h"

NS_ASSUME_NONNULL_BEGIN

/// manifest 就绪回调。
typedef void (^TQManifestReadyBlock)(TQWarmupManifest *manifest);

/// manifest 拉取 / 缓存 / 新鲜度管理（进程内，由 Prewarmer 持有）。
///
/// 策略（design.md Decision 5）：内存缓存整个 session；TTL 读自响应头 Cache-Control: max-age，
/// 缺省 300s；ensureFresh 缺失则拉取并排队回调（pending replay），已有但过期则后台重拉
/// （stale-while-revalidate）；isFetching 保护每 TTL 窗口最多一次重拉；拉取失败静默。
@interface TQManifestStore : NSObject

@property (nonatomic, copy, nullable) void (^onVersionChanged)(void);

- (void)setManifestUrl:(NSString *)url;
- (nullable TQWarmupManifest *)currentManifest;
- (BOOL)isStale;
- (void)ensureFresh:(nullable TQManifestReadyBlock)onReady;

/// 解析 Cache-Control: max-age=NNN → 秒；无则返回 nil。测试可见。
+ (nullable NSNumber *)parseMaxAge:(nullable NSString *)headerValue;

@end

NS_ASSUME_NONNULL_END
