#ifndef NODES_H
#define NODES_H

#include "aliases/aliases.h"
#include "window.h"

#define MAX_NODES 1024

#define NODE_WIDTH 70
#define NODE_HEIGHT 20

#define IO_NODE_FILL_COLOUR ((colour_t){.abgr = 0xff2c84b7})
#define IO_NODE_BORDER_COLOUR ((colour_t){.abgr = 0xff315c89})
#define OP_NODE_FILL_COLOUR ((colour_t){.abgr = 0xffad6c3a})
#define OP_NODE_BORDER_COLOUR ((colour_t){.abgr = 0xff8e4a33})

typedef i32 (*node_func_t)(i32 a, i32 b);
typedef enum node_type node_type_t;
typedef union node_data node_data_t;
typedef struct node node_t;

enum node_type {
  NODE_TYPE_IO,
  NODE_TYPE_OP,

  COUNT_NODE_TYPES,
};

union node_data {
  const char *path;
  node_func_t func;
};

struct node {
  rect_t rect;
  node_type_t type;
  node_data_t data;
};

bool aabb(const node_t *node, i32 x, i32 y);
void draw_node(const window_t *wnd, const node_t *node);

#endif // !NODES_H