#pragma once
// clang-format off

#define DIRECT_SWITCH 1
#define DIODE_ROW2COL 2
#define DIODE_COL2ROW 3

#ifndef ROW2COL
#    define COL2ROW 0
#    define ROW2COL 1
#endif

#ifdef DIRECT_PINS
#    define MATRIX_TYPE DIRECT_SWITCH
#else
#    if DIODE_DIRECTION == ROW2COL
#        define MATRIX_TYPE DIODE_ROW2COL
#    endif
#    if DIODE_DIRECTION == COL2ROW
#        define MATRIX_TYPE DIODE_COL2ROW
#    endif
#endif

#ifndef MATRIX_TYPE
#   error "MATRIX_TYPE could not be determined."
#endif

#if (MATRIX_ROWS <= 8)
typedef uint8_t matrix_col_t;
#elif (MATRIX_ROWS <= 16)
typedef uint16_t matrix_col_t;
#elif (MATRIX_ROWS <= 32)
typedef uint32_t matrix_col_t;
#else
#    error "MATRIX_ROWS: invalid value"
#endif