#pragma once

#include "Widget.hpp"

class PowerLinkWidget : public Widget {
public:
    explicit PowerLinkWidget(const WidgetConfig& config);
    ~PowerLinkWidget() override;
    lv_obj_t* create(lv_obj_t* parent) override;
    void applyStyle() override;
    void onKnxValue(float value) override;
    void onKnxSwitch(bool value) override;

private:
    static constexpr uint8_t POINT_COUNT = 16;
    lv_point_precise_t points_[POINT_COUNT] = {};
    lv_obj_t* dot_ = nullptr;
    float p0x_ = 0.0f;
    float p0y_ = 0.0f;
    float p1x_ = 0.0f;
    float p1y_ = 0.0f;
    float p2x_ = 0.0f;
    float p2y_ = 0.0f;
    float pathLen_ = 0.0f;
    float dotRadius_ = 3.0f;
    float speed_ = 0.0f;
    bool reverse_ = false;
    void buildLinePoints();
    void startDotAnimation();
    void updateAnimation(float speed, bool reverse);
    static void dotAnimExec(void* var, int32_t value);
};
