#pragma once

typedef enum {
  ESC = 27,
  BACKSPACE = 127,
  ARROW_LEFT = 1000,
  ARROW_RIGHT,
  ARROW_UP,
  ARROW_DOWN,
  DEL_KEY,
  HOME_KEY,
  END_KEY,
  PAGE_UP,
  PAGE_DOWN,
} keycode_t;

typedef struct {
  char *buffer;
  int len;
} term_t;

void term_panic(const char *s);
void term_disable_raw_mode(void);
void term_enable_raw_mode(void);
int term_read_cursor_pos(int *rows, int *cols);
int term_read_window_size(int *rows, int *cols);
int term_poll_key(int timeout);
int term_read_key(void);
void term_write(char *str);
void term_writef(const char *format, ...);
void term_flush(void);
