#ifndef UTILS_H
#define UTILS_H

#include <stdint.h>

namespace esp32 {
namespace utils {

// 三次贝塞尔曲线计算
float cubicBezier(float t, float p0, float p1, float p2, float p3);

float solveCubicBezierX(float xTarget,
                        float x1,
                        float x2,
                        float epsilon = 0.00001f);

float linear2CubicBezier(float source,
                         float x1 = 0.42f,
                         float y1 = 0.0f,
                         float x2 = 0.58f,
                         float y2 = 1.0f);

// RGB 颜色转换
uint16_t rgbTo565(uint32_t rgbColor);

}  // namespace utils

// 颜色常量 (全局命名空间)
namespace colors {
    inline uint16_t BLACK()   { return utils::rgbTo565(0x000000); }
    inline uint16_t WHITE()   { return utils::rgbTo565(0xFFFFFF); }
    inline uint16_t RED()     { return utils::rgbTo565(0xFF0000); }
    inline uint16_t GREEN()   { return utils::rgbTo565(0x00FF00); }
    inline uint16_t BLUE()    { return utils::rgbTo565(0x0000FF); }
    inline uint16_t YELLOW()  { return utils::rgbTo565(0xFFFF00); }
}  // namespace colors

}  // namespace esp32

// 为了兼容性,保留宏定义
#define BLACK   esp32::colors::BLACK()
#define WHITE   esp32::colors::WHITE()
#define RED     esp32::colors::RED()
#define GREEN   esp32::colors::GREEN()
#define BLUE    esp32::colors::BLUE()
#define YELLOW  esp32::colors::YELLOW()

#endif  // UTILS_H
