#pragma once

#include "Global.h"

#define ONE_MINUTE_s 60
#define ONE_HOUR_m 60
#define ONE_HOUR_s 60 * ONE_MINUTE_s
#define LEAP_YEAR(Y) (((1970 + Y) > 0) && !((1970 + Y) % 4) && (((1970 + Y) % 100) || !((1970 + Y) % 400)))
#define MIN_DATETIME 1575158400
#define ONE_SECOND_ms 1000

/*
 * Время (мс) прошедщее с @since
 */
unsigned long millis_since(unsigned long sinse);

/*
 * Интерввал времени (мс) между @start и @finish
 */
unsigned long millis_passed(unsigned long start, unsigned long finish);

/*
 * Форматиронное время интервала (мс)
 * "чч:мм:cc",
 * "дд чч:мм", если > 24 часов
 */
const String prettyMillis(unsigned long time_ms = millis());

/*
 * Форматиронное время интервала (c)
 * "чч:мм:cc",
 * "дд чч:мм", если > 24 часов
 */
const String prettySeconds(unsigned long time_s);

/*
 * Тайм зона в секундах
 */
int getOffsetInSeconds(int timezone);

/*
 * Тайм зона в минутах
 */
int getOffsetInMinutes(int timezone);

/*
 * Разбивает время на составляющие
 */

struct Time_t {
    uint8_t second;
    uint8_t minute;
    uint8_t hour;
    uint8_t day_of_week;
    uint8_t day_of_month;
    uint8_t month;
    uint16_t day_of_year;
    uint16_t year;
    unsigned long days;
    unsigned long valid;
};

void breakEpochToTime(unsigned long epoch, Time_t& tm);

// void timeInit();