#include "brett.h"

char * get_key(uint16_t keycode) {
    switch (keycode) {
        case FAT_ARROW:
            return "=>";
        case SKINNY_ARROW:
            return "->";
        case REVERSE_ARROW:
            return "<-";
        case CONCAT:
            return "<>";
        case MAP:
            return "<$>";
        case MAP_FLIPPED:
            return "<#>";
        case FLAP:
            return "<@>";
        case PIPE:
            return "|>";
        case ALT:
            return "<|>";
        case APPLY:
            return "<*>";
        case AND:
            return "&&";
        case OR:
            return "||";
        case BIND:
            return ">>=";
        case BIND_FLIPPED:
            return "=<<";
        case DOUBLE_COLON:
            return "::";
        case VOID_LEFT:
            return "<$";
        case VOID_RIGHT:
            return "$>";
        default:
            return "";
    }
}

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    bool pressed = record->event.pressed;
    switch (keycode) {
        case FAT_ARROW ... DOUBLE_COLON:
            if (pressed) {
                send_string(get_key(keycode));
            }
            return false;
        case FLASH:
            if (!pressed) {
                SEND_STRING("make -j8 --output-sync " QMK_KEYBOARD ":" QMK_KEYMAP ":flash" SS_TAP(X_ENTER));
                reset_keyboard();
            }
            return false;
        default:
            return true;
    }
}