use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use crate::{FeeRate, Sats, SigOps, VSize};
use super::{CpfpCluster, CpfpEntry};
/// CPFP (Child Pays For Parent) information for a transaction.
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
pub struct CpfpInfo {
/// Ancestor transactions in the CPFP chain.
pub ancestors: Vec<CpfpEntry>,
/// Best (highest fee rate) descendant, if any.
pub best_descendant: Option<CpfpEntry>,
/// Descendant transactions in the CPFP chain.
pub descendants: Vec<CpfpEntry>,
/// Effective fee rate considering CPFP relationships (sat/vB).
/// This is the seed's chunk feerate after lift-merging, i.e. the
/// rate Core/mempool.space would surface for this tx.
pub effective_fee_per_vsize: FeeRate,
/// BIP-141 sigop cost for the seed tx (witness sigops count as 1,
/// legacy and P2SH-redeem sigops count as 4).
pub sigops: SigOps,
/// Transaction fee (sats).
pub fee: Sats,
/// Virtual size of the seed tx (vbytes).
pub vsize: VSize,
/// Policy-adjusted virtual size: `max(vsize, sigops * 5)`.
pub adjusted_vsize: VSize,
/// Cluster the seed belongs to: full tx list, SFL-linearized chunks,
/// and the seed's chunk index. Omitted when the seed has no
/// ancestors and no descendants (matches mempool.space).
#[serde(skip_serializing_if = "Option::is_none")]
pub cluster: Option<CpfpCluster>,
}