/// HTTP 请求加密结果
///
/// 加密回调返回此对象，[EncryptionInterceptor] 根据非 null 字段覆盖原始请求。
/// 未设置的字段保持原值不变。
///
/// 设计依据：HTTP 加密模式下，加密后需要同时修改：
/// - 路径（原文 path 加密为 hex 编码）
/// - 请求体（JSON body 加密为 base64 字符串，不再是 Map）
/// - Headers（添加 X-Token、X-Signature、secret-key 等加密 header）
/// - Content-Type（JSON → text/plain）
///
/// ```dart
/// // 加密回调返回示例
/// EncryptedRequest(
///   path: '/api/${hexEncode(encrypt(originalPath))}',
///   body: base64Encode(encrypt(jsonBody)),
///   headers: {
///     'X-Token': encryptedToken,
///     'X-Signature': signature,
///     'secret-key': clientPublicKey,
///   },
///   contentType: 'text/plain',
/// )
/// ```
class EncryptedRequest {
  /// 加密后的路径
  ///
  /// null 表示不修改路径。
  /// 如需加密，拦截器会用此值替换 `RequestOptions.path`。
  final String? path;

  /// 加密后的请求体
  ///
  /// null 表示不修改 body。
  /// 类型不限于 Map — 加密后通常是 base64 字符串或 bytes。
  final Object? body;

  /// 需要添加或覆盖的 headers
  ///
  /// null 表示不修改 headers。
  /// 拦截器会将这些 header 合并到请求中（覆盖同名 header）。
  final Map<String, String>? headers;

  /// 覆盖 Content-Type
  ///
  /// null 表示不修改。加密后通常是 `text/plain`（body 已是字符串，非 JSON）。
  final String? contentType;

  const EncryptedRequest({
    this.path,
    this.body,
    this.headers,
    this.contentType,
  });
}
