#pragma once

#include "emc/nml_intf/canon.hh"

extern "C" {

typedef enum {
    IDX_OK = 0,
    IDX_NEW,
    IDX_FAIL,
} toolidx_t;

typedef enum {
    DB_NOTUSED = 0,
    DB_ACTIVE,
} tooldb_t;

typedef enum {
    SPINDLE_LOAD,
    SPINDLE_UNLOAD,
    TOOL_OFFSET,
} tool_notify_t;

struct CANON_TOOL_TABLE tooldata_entry_init(void);
toolidx_t tooldata_put(struct CANON_TOOL_TABLE tdata, int idx);
toolidx_t tooldata_get(CANON_TOOL_TABLE *pdata, int idx);

void tooldata_init(bool random_tool_changer);
void tooldata_reset(void);
void tooldata_last_index_set(int idx);
int tooldata_last_index_get(void);
int tooldata_find_index_for_tool(int toolno);

void tooldata_format_toolline(int idx,
                              bool ignore_zero_values,
                              CANON_TOOL_TABLE tdata,
                              char formatted_line[CANON_TOOL_ENTRY_LEN]);

void tooldata_add_init(int nonrandom_start_idx);
int tooldata_read_entry(const char *input_line);

void tooldata_set_db(tooldb_t mode);
int tooldata_load(const char *filename);
int tooldata_save(const char *filename);

#define DB_SPINDLE_SAVE "./db_spindle.tbl"

int tooldata_db_getall(void);

}
