#pragma once
#include QMK_KEYBOARD_H
enum userspace_mode {
    MAC = 0,
    WINDOWS,
    MAC_UNI,
    WINDOWS_UNI,
    LINUX_UNI,
};
enum userspace_keycodes {
    RV_NON = SAFE_RANGE,
    RV_SM0,       RV_SM1,       RV_SM2,       RV_SM3,       RV_SM4,       RV_SM0S,      RV_SM1S,      RV_SM2S,      RV_SM3S,      RV_SM4S,      RV_SAYM,      RV_LOCK,      RV_AUML,      RV_OUML,      RV_UUML,      RV_EUR,       RV_SZ,        RV_TM,        RV_RT,        RV_CC,        RV_DEG,       RV_SNAP,      RV_PM,        RV_UNEQ,      RV_SUP1,      RV_SUP2,      RV_SUP3,  
};
typedef union {
    uint32_t raw;
    struct {
        bool mode_1 : 1;
        bool mode_2 : 1;
        bool mode_3 : 1;
    };
} userspace_config_t;
extern userspace_config_t userspace_config;
uint8_t  get_mode(void);
void     set_mode(uint8_t mode, bool save);
void     switch_mode(uint8_t mode);
bool     is_unicode(uint8_t mode);
void keyboard_pre_init_keymap(void);
void keyboard_post_init_keymap(void);
void eeconfig_init_keymap(void);
bool process_record_keymap(uint16_t keycode, keyrecord_t *record);