#pragma once
#include "BuildTime.h"

// Версия прошивки

#define FIRMWARE_VERSION 462

#ifdef esp8266_1mb_ota
#define FIRMWARE_NAME "esp8266_1mb_ota"
#endif

#ifdef esp8266_1mb
#define FIRMWARE_NAME "esp8266_1mb"
#endif

#ifdef esp8266_2mb
#define FIRMWARE_NAME "esp8266_2mb"
#endif

#ifdef esp8266_2mb_ota
#define FIRMWARE_NAME "esp8266_2mb_ota"
#endif

#ifdef esp8266_4mb
#define FIRMWARE_NAME "esp8266_4mb"
#endif

#ifdef esp8266_16mb
#define FIRMWARE_NAME "esp8266_16mb"
#endif

#ifdef esp32_4mb
#define FIRMWARE_NAME "esp32_4mb"
#endif

#ifdef esp32_4mb3f
#define FIRMWARE_NAME "esp32_4mb3f"
#endif

#ifdef esp32cam_4mb
#define FIRMWARE_NAME "esp32cam_4mb"
#endif

#ifdef esp32_16mb
#define FIRMWARE_NAME "esp32_16mb"
#endif

#ifdef esp32s2_4mb
#define FIRMWARE_NAME "esp32s2_4mb"
#endif

#ifdef esp32c3m_4mb
#define FIRMWARE_NAME "esp32c3m_4mb"
#endif

#ifdef esp32s3_16mb
#define FIRMWARE_NAME "esp32s3_16mb"
#endif

#ifdef bk7231n
#define FIRMWARE_NAME "bk7231n"
#endif

#ifdef esp32c6_4mb
#define FIRMWARE_NAME "esp32c6_4mb"
#endif

#ifdef esp32c6_8mb
#define FIRMWARE_NAME "esp32c6_8mb"
#endif

#ifdef esp32_wifirep
#define FIRMWARE_NAME "esp32_wifirep"
#endif
// Размер буфера json
#define JSON_BUFFER_SIZE 4096  // держим 2 кб не меняем

/*
WEB_SOCKETS_FRAME_SIZE создан для того что бы не загружать оперативку.
Эта технология передаёт в сокеты большие файлы по частям.
Чем меньше этот фрейм тем теоретически лучше.
Но и сильно малый он тоже быть не должен.
Я опытным путём установил что размер 1024 является оптимальным. Можно так же поставить 2048
*/
#define WEB_SOCKETS_FRAME_SIZE 1024

// #define LOOP_DEBUG

// выбор сервера
// #define ASYNC_WEB_SERVER
// #define ASYNC_WEB_SOCKETS
#define STANDARD_WEB_SERVER
#define STANDARD_WEB_SOCKETS

//#ifndef LIBRETINY
#define UDP_ENABLED
//#endif
// #define REST_FILE_OPERATIONS

#define MQTT_RECONNECT_INTERVAL 20000

#define TELEMETRY_UPDATE_INTERVAL_MIN 60

#define USE_LITTLEFS true

#define START_DATETIME 1661990400  // 01.09.2022 00:00:00 константа для сокращения unix time

#define MIN_DATETIME 1575158400
#define LEAP_YEAR(Y) (((1970 + Y) > 0) && !((1970 + Y) % 4) && (((1970 + Y) % 100) || !((1970 + Y) % 400)))

#ifdef LIBRETINY
//#define WIFI_ASYNC
#endif

#if defined(ESP32) && !defined(esp32_wifirep)
#define WIFI_ASYNC
#endif

// задачи таскера
enum TimerTask_t {
    WIFI_SCAN,
    WIFI_MQTT_CONNECTION_CHECK,
#ifdef WIFI_ASYNC    
    WIFI_CONN,
#endif    
    TIME,
    // TIME_SYNC, // не используется
    // UPTIME, // не используется
    UDPt,    // UDPP
    TIMES,  // периодические секундные проверки
    PTASK,
    ST,
    PiWS,
    END
};

// задачи которые надо протащить через loop // не используется
// enum NotAsyncActions {
//     do_ZERO,
//     do_MQTTPARAMSCHANGED,
//     do_LAST,
// };

// состояния обновления
enum UpdateStates { UPDATE_COMPLETED, UPDATE_FAILED, PATH_ERROR };

enum distination {
    TO_MQTT,
    TO_WS,
    TO_MQTT_WS
};

// #define WS_BROADCAST -1 // не используется
