#ifndef DEVICE_CTRL_LOADOMETER_H
#define DEVICE_CTRL_LOADOMETER_H
#include <cstdint>

#include "loadometer_decoder.h"
#include "wbs/loadometer/loadometer_config.pb.h"

namespace zsy
{
    class Loadometer
    {
    protected:
        /**
         * 地磅配置
         */
        LoadometerConfig config;
        /**
         * 解码器
         */
        std::shared_ptr<LoadometerDecoder> decoder;
        /**
         * 磅重数据，单位：千克
         */
        std::atomic_int32_t weight;
        /**
         * 上次更新时间
         */
        std::atomic_uint64_t lastUpdateTime;
        /**
         * 稳定次数
         */
        std::atomic_uint64_t steady;

    public:
        explicit Loadometer(const LoadometerConfig &config, const std::shared_ptr<LoadometerDecoder> &decoder);

        /**
         * 获取当前磅重
         *
         * @return 磅重，单位：千克
         */
        int32_t currentWeight() const;

        /**
         * 设置磅重
         *
         * @param newWeight 磅重，单位：千克
         */
        void updateWeight(int32_t newWeight);

        /**
         * 获取设备编号
         *
         * @return 设备编号
         */
        std::string sn() const;

        /**
         * 获取设备名称
         *
         * @return 设备名称
         */
        std::string name() const;

        virtual bool canUse() const = 0;

        virtual ~Loadometer() = default;
    };
} // zsy

#endif // DEVICE_CTRL_LOADOMETER_H