from __future__ import annotations

from collections.abc import Generator
from typing import TYPE_CHECKING

import simpy

from kernbench.components.base import ComponentBase

if TYPE_CHECKING:
    from kernbench.components.context import ComponentContext
    from kernbench.topology.types import Node


class PcieEpComponent(ComponentBase):
    """PCIe endpoint: protocol processing overhead before forwarding.

    Applies overhead_ns (from node.attrs) for PCIe protocol handling,
    then forwards via inherited _forward_txn().
    """

    def __init__(self, node: Node, ctx: ComponentContext | None = None) -> None:
        super().__init__(node, ctx)

    def run(self, env: simpy.Environment, nbytes: int) -> Generator:
        overhead_ns = float(self.node.attrs.get("overhead_ns", 0.0))
        yield env.timeout(overhead_ns)
