/* core.h - platform-independent interaction logic. */
#ifndef MOUSEBOARD_CORE_H
#define MOUSEBOARD_CORE_H

#include "config.h"
#include "platform.h"

/*
 * Run the full flow: draw the grid, read keys, refine by bisection, and click.
 * If dry_run is set, the chosen target and action are printed to stdout instead
 * of moving/clicking the pointer.
 *
 * Returns 0 if an action was taken, 1 if the user cancelled, 2 on error.
 */
int core_run(struct platform *p, const struct config *cfg, int dry_run);

/* Offline checks of the pure logic (labels, bisection, config). Prints results;
 * returns 0 if all pass. Needs no display. */
int core_selftest(void);

#endif /* MOUSEBOARD_CORE_H */
