#include QMK_KEYBOARD_H
#include "he_logic.h"

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [0] = LAYOUT(
        KC_ESC,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC,
        KC_TAB,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,
        KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT
    )
};

// VIAL custom values for HE settings
// Using VIAL Custom Values API
enum he_vial_values {
    VIAL_HE_ACTUATION = 0,
    VIAL_HE_RT_SENSE
};

#ifdef VIAL_ENABLE
void vial_custom_value_get(uint8_t value_id, uint8_t *data, uint8_t length) {
    if (length < 2) return;
    
    switch (value_id) {
        case VIAL_HE_ACTUATION:
            data[0] = (global_actuation_point >> 8) & 0xFF;
            data[1] = global_actuation_point & 0xFF;
            break;
        case VIAL_HE_RT_SENSE:
            data[0] = (global_rt_sensitivity >> 8) & 0xFF;
            data[1] = global_rt_sensitivity & 0xFF;
            break;
    }
}

void vial_custom_value_set(uint8_t value_id, uint8_t *data, uint8_t length) {
    if (length < 2) return;
    
    uint16_t new_val = (data[0] << 8) | data[1];
    
    switch (value_id) {
        case VIAL_HE_ACTUATION:
            global_actuation_point = new_val;
            break;
        case VIAL_HE_RT_SENSE:
            global_rt_sensitivity = new_val;
            break;
    }
}
#endif
