#include <memory>

#include "tatum/TimingGraphFwd.hpp"

#include "atom_netlist_fwd.h"
#include "atom_lookup.h"

class TimingGraphBuilder {
  public:
    TimingGraphBuilder(const AtomNetlist& netlist,
                       AtomLookup& netlist_lookup);

    std::unique_ptr<tatum::TimingGraph> timing_graph(bool allow_dangling_combinational_nodes);

  private:
    void build(bool allow_dangling_combinational_nodes);
    void opt_memory_layout();

    void add_io_to_timing_graph(const AtomBlockId blk);
    void add_block_to_timing_graph(const AtomBlockId blk);
    void add_net_to_timing_graph(const AtomNetId net);

    void fix_comb_loops();
    tatum::EdgeId find_scc_edge_to_break(std::vector<tatum::NodeId> scc);

    void remap_ids(const tatum::GraphIdMaps& id_mapping);

    const t_pb_graph_pin* find_pb_graph_pin(const AtomPinId pin);
    const t_pb_graph_pin* find_associated_clock_pin(const AtomPinId pin);

    void mark_clustering_net_delays(float inter_cluster_net_delay);

    bool is_netlist_clock_source(const AtomPinId pin) const;

  private:
    std::unique_ptr<tatum::TimingGraph> tg_;

    const AtomNetlist& netlist_;
    AtomLookup& netlist_lookup_;

    std::set<AtomPinId> netlist_clock_drivers_;
};
