#pragma once


// ============= НАСТРОЙКИ =============
// --- ESP -----------------------------
#define ESP_MODE              (1U)                          // 0U - WiFi точка доступа, 1U - клиент WiFi (подключение к роутеру)
#define ESP_USE_BUTTON                                      // если строка не закомментирована, должна быть подключена кнопка (иначе ESP может регистрировать "фантомные" нажатия и некорректно устанавливать яркость)
#define ESP_HTTP_PORT         (80U)                         // номер порта, который будет использоваться во время первой утановки имени WiFi сети (и пароля), к которой потом будет подключаться лампа в режиме WiFi клиента (лучше не менять)
#define ESP_UDP_PORT          (8888U)                       // номер порта, который будет "слушать" UDP сервер во время работы лампы как в режиме WiFi точки доступа, так и в режиме WiFi клиента (лучше не менять)
#define ESP_CONN_TIMEOUT      (7U)                          // время в секундах (ДОЛЖНО БЫТЬ МЕНЬШЕ 8, иначе сработает WDT), которое ESP будет пытаться подключиться к WiFi сети, после его истечения автоматически развернёт WiFi точку доступа
#define ESP_CONF_TIMEOUT      (300U)                        // время в секундах, которое ESP будет ждать ввода SSID и пароля WiFi сети роутера в конфигурационном режиме, после его истечения ESP перезагружается
#define GENERAL_DEBUG                                       // если строка не закомментирована, будут выводиться отладочные сообщения
#define WIFIMAN_DEBUG         (true)                        // вывод отладочных сообщений при подключении к WiFi сети: true - выводятся, false - не выводятся; настройка не зависит от GENERAL_DEBUG
#define OTA                                                 // если строка не закомментирована, модуль будет ждать два последдовательных запроса пользователя на прошивку по воздуху (см. документацию в "шапке")
#ifdef OTA
#define ESP_OTA_PORT          (8266U)                       // номер порта, который будет "прослушиваться" в ожидании команды прошивки по воздуху
#endif
#define LED_PIN               (2U)                          // пин ленты
#define BTN_PIN               (4U)                          // пин кнопки

// --- ESP (WiFi клиент) ---------------
const uint8_t STA_STATIC_IP[] = {};                         // статический IP адрес: {} - IP адрес определяется роутером; {192, 168, 1, 66} - IP адрес задан явно (если DHCP на роутере не решит иначе); должен быть из того же диапазона адресов, что разадёт роутер
                                                            // SSID WiFi сети и пароль будут запрошены WiFi Manager'ом в режиме WiFi точки доступа, нет способа захардкодить их в прошивке

// --- AP (WiFi точка доступа) ---
#define AP_NAME               ("LedLamp")                   // имя WiFi точки доступа, используется как при запросе SSID и пароля WiFi сети роутера, так и при работе в режиме ESP_MODE = 0
#define AP_PASS               ("31415926")                  // пароль WiFi точки доступа
const uint8_t AP_STATIC_IP[] = {192, 168, 4, 1};            // статический IP точки доступа (лучше не менять)

// --- ВРЕМЯ ---------------------------
#define USE_NTP                                             // закомментировать или удалить эту строку, если нужно, чтобы устройство не лезло в интернет
#define GMT                   (3)                           // часовой пояс (москва 3)
#define NTP_ADDRESS           ("ntp2.colocall.net")         // сервер времени
#define NTP_INTERVAL          (30UL * 60UL * 1000UL)        // интервал синхронизации времени (30 минут)

// --- РАССВЕТ -------------------------
#define DAWN_BRIGHT           (200U)                        // максимальная яркость рассвета (0-255)
#define DAWN_TIMEOUT          (1U)                          // сколько рассвет светит после времени будильника, минут

// --- МАТРИЦА -------------------------
#define BRIGHTNESS            (40U)                         // стандартная маскимальная яркость (0-255)
#define CURRENT_LIMIT         (2000U)                       // лимит по току в миллиамперах, автоматически управляет яркостью (пожалей свой блок питания!) 0 - выключить лимит

#define WIDTH                 (16U)                         // ширина матрицы
#define HEIGHT                (16U)                         // высота матрицы

#define COLOR_ORDER           (GRB)                         // порядок цветов на ленте. Если цвет отображается некорректно - меняйте. Начать можно с RGB

#define MATRIX_TYPE           (0U)                          // тип матрицы: 0 - зигзаг, 1 - параллельная
#define CONNECTION_ANGLE      (0U)                          // угол подключения: 0 - левый нижний, 1 - левый верхний, 2 - правый верхний, 3 - правый нижний
#define STRIP_DIRECTION       (0U)                          // направление ленты из угла: 0 - вправо, 1 - вверх, 2 - влево, 3 - вниз
                                                            // при неправильной настройке матрицы вы получите предупреждение "Wrong matrix parameters! Set to default"
                                                            // шпаргалка по настройке матрицы здесь! https://alexgyver.ru/matrix_guide/


// ============= ДЛЯ РАЗРАБОТЧИКОВ =====
                                                            // список и номера эффектов ниже в списке согласованы с android приложением!
#define EFF_SPARKLES          (0U)                          // Конфетти
#define EFF_FIRE              (1U)                          // Огонь
#define EFF_RAINBOW_VER       (2U)                          // Радуга вертикальная
#define EFF_RAINBOW_HOR       (3U)                          // Радуга горизонтальная
#define EFF_RAINBOW_DIAG      (4U)                          // Радуга диагональная
#define EFF_COLORS            (5U)                          // Смена цвета
#define EFF_MADNESS           (6U)                          // Безумие 3D
#define EFF_CLOUDS            (7U)                          // Облака 3D
#define EFF_LAVA              (8U)                          // Лава 3D
#define EFF_PLASMA            (9U)                          // Плазма 3D
#define EFF_RAINBOW           (10U)                         // Радуга 3D
#define EFF_RAINBOW_STRIPE    (11U)                         // Павлин 3D
#define EFF_ZEBRA             (12U)                         // Зебра 3D
#define EFF_FOREST            (13U)                         // Лес 3D
#define EFF_OCEAN             (14U)                         // Океан 3D
#define EFF_COLOR             (15U)                         // Цвет
#define EFF_SNOW              (16U)                         // Снегопад
#define EFF_SNOWSTORM         (17U)                         // Метель
#define EFF_STARFALL          (18U)                         // Звездопад
#define EFF_MATRIX            (19U)                         // Матрица
#define EFF_LIGHTERS          (20U)                         // Светлячки
#define EFF_LIGHTER_TRACES    (21U)                         // Светлячки со шлейфом
#define EFF_PAINTBALL         (22U)                         // Пейнтбол
#define EFF_CUBE              (23U)                         // Блуждающий кубик
#define EFF_WHITE_COLOR       (24U)                         // Белый свет
#define MODE_AMOUNT           (25U)                         // количество режимов

//#define MAX_UDP_BUFFER_SIZE (UDP_TX_PACKET_MAX_SIZE + 1)
#define MAX_UDP_BUFFER_SIZE   (129U)                        // максимальный размер буффера UDP сервера

// --- БИБЛИОТЕКИ ----------------------
#define FASTLED_INTERRUPT_RETRY_COUNT   (0U)
#define FASTLED_ALLOW_INTERRUPTS        (0U)
#define FASTLED_ESP8266_RAW_PIN_ORDER

#define NUM_LEDS              (WIDTH * HEIGHT)
#define SEGMENTS              (1U)                          // диодов в одном "пикселе" (для создания матрицы из кусков ленты)
