#ifndef LIGHTNING_PLUGINS_ASKRENE_LAYER_H
#define LIGHTNING_PLUGINS_ASKRENE_LAYER_H
#include "config.h"
#include <bitcoin/short_channel_id.h>
#include <common/amount.h>
#include <common/node_id.h>
struct askrene;
struct command;
struct layer;
struct json_stream;
struct layer_name_hash *new_layer_name_hash(const tal_t *ctx);
struct layer *find_layer(struct askrene *askrene, const char *name);
struct layer *new_layer(struct askrene *askrene, const char *name TAKES, bool persistent);
struct layer *new_temp_layer(const tal_t *ctx, struct askrene *askrene, const char *name TAKES);
void remove_layer(struct layer *layer);
const char *layer_name(const struct layer *layer);
const struct local_channel *layer_find_local_channel(const struct layer *layer,
struct short_channel_id scid);
struct amount_msat local_channel_capacity(const struct local_channel *lc);
void load_layers(struct askrene *askrene, struct command *init_cmd);
bool layer_check_local_channel(const struct local_channel *lc,
const struct node_id *n1,
const struct node_id *n2,
struct amount_msat capacity);
void layer_add_local_channel(struct layer *layer,
const struct node_id *src,
const struct node_id *dst,
struct short_channel_id scid,
struct amount_msat capacity);
const struct bias *layer_set_bias(struct layer *layer,
const struct short_channel_id_dir *scidd,
const char *description TAKES,
s8 bias_factor,
bool relative,
u64 timestamp);
const struct node_bias *layer_set_node_bias(struct layer *layer,
const struct node_id *node,
const char *description TAKES,
s8 bias_factor,
bool relative,
bool dir_out,
u64 timestamp);
void layer_add_update_channel(struct layer *layer,
const struct short_channel_id_dir *scidd,
const bool *enabled,
const struct amount_msat *htlc_min,
const struct amount_msat *htlc_max,
const struct amount_msat *base_fee,
const u32 *proportional_fee,
const u16 *delay);
void layer_clear_overridden_capacities(const struct layer *layer,
const struct gossmap *gossmap,
fp16_t *capacities);
void layer_apply_constraints(const struct layer *layer,
const struct short_channel_id_dir *scidd,
struct amount_msat *min,
struct amount_msat *max)
NO_NULL_ARGS;
void layer_apply_biases(const struct layer *layer,
const struct gossmap *gossmap,
s8 *biases);
const struct constraint *layer_add_constraint(struct layer *layer,
const struct short_channel_id_dir *scidd,
u64 timestamp,
const struct amount_msat *min,
const struct amount_msat *max);
void layer_add_localmods(const struct layer *layer,
const struct gossmap *gossmap,
struct gossmap_localmods *localmods);
size_t layer_trim_constraints(struct layer *layer, u64 cutoff);
void layer_add_disabled_node(struct layer *layer, const struct node_id *node);
void json_add_layers(struct json_stream *js,
const struct askrene *askrene,
const char *fieldname,
const struct layer *layer);
void json_add_constraint(struct json_stream *js,
const char *fieldname,
const struct constraint *c,
const struct layer *layer);
void json_add_bias(struct json_stream *js,
const char *fieldname,
const struct bias *b,
const struct layer *layer);
void json_add_node_bias(struct json_stream *js,
const char *fieldname,
const struct node_bias *b,
const struct layer *layer);
bool layer_created(const struct layer *layer, struct short_channel_id scid);
bool layer_disables_chan(const struct layer *layer, const struct short_channel_id_dir *scidd);
bool layer_disables_node(const struct layer *layer, const struct node_id *node);
#endif