#include QMK_KEYBOARD_H

#define _BL 0
#define _HL 1
#define _LL 2

enum keycodes {
  LOW,
  HIGH
};

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  /*
  * Base Layer (Numbers)
  */
  [_BL] = LAYOUT(
    KC_KP_7,    KC_KP_8,    KC_KP_9,
    KC_KP_4,    KC_KP_5,    KC_KP_6,
    KC_KP_1,    KC_KP_2,    KC_KP_3,
    LOW,        KC_KP_0,    HIGH
  ),
  /*
  * High Layer (Work)
  */
  [_HL] = LAYOUT(
    KC_NUMLOCK,      KC_PAST,    KC_NO,
    KC_PMNS,         KC_PENT,    KC_PPLS,
    KC_NO,           KC_PSLS,    KC_NO,
    KC_NO,           KC_PDOT,    KC_NO
  ),
  /*
  * Low Layer (Media)
  */
  [_LL] = LAYOUT(
    KC_NO,    KC_VOLU,    KC_NO,
    KC_MPRV,  KC_MPLY,    KC_MNXT,
    KC_NO,    KC_VOLD,    KC_NO,
    KC_NO,    KC_NO,      KC_NO
  ),
};

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  switch(keycode) {
    case HIGH:
      if (record->event.pressed) {
        layer_on(_HL);
      }else{
        layer_off(_HL);
        layer_off(_LL);
      }
      return false;
      break;
    case LOW:
      if (record->event.pressed) {
        layer_on(_LL);
      }else{
        layer_off(_LL);
        layer_off(_HL);
      }
      return false;
      break;
  }
  return true;
}