// Author: NiuJiuRu
// Email: niujiuru@qq.com
// Date: 2025-11-20

package mcu_ctrl_board

import "sync"

// 定义_RTU_数据板的工作状态
type WorkState uint32

const (
	Idle                WorkState = 0      // 空闲(默认)
	RtuAppUpgrading     WorkState = 1 << 0 // 数据板的固件-升级中
	McuAppUpgrading     WorkState = 1 << 1 // 控制板的固件-升级中
	PhotoCapturing      WorkState = 1 << 2 // 当前相机图像-拍照中
	PhotoUploading      WorkState = 1 << 3 // 相机图像文件-上传中
	SensorDataReceiving WorkState = 1 << 4 // 当前环境数据-收集中
	SensorDataUploading WorkState = 1 << 5 // 当前环境数据-上传中
	SensorHistUploading WorkState = 1 << 6 // 历史环境数据-上传中
)

// RTU数据板的工作状态管理器
type WorkStateMgr struct {
	mu    sync.RWMutex
	state WorkState
}

var GlobalWorkState = &WorkStateMgr{state: Idle}

// 工作状态管理-添加一个状态
func (mgr *WorkStateMgr) Add(s WorkState) {
	mgr.mu.Lock()
	defer mgr.mu.Unlock()
	mgr.state |= s
}

// 工作状态管理-清除一个状态
func (mgr *WorkStateMgr) Remove(s WorkState) {
	mgr.mu.Lock()
	defer mgr.mu.Unlock()
	mgr.state &^= s
}

// 工作状态管理-获取当前状态
// 判断某个状态是否存在
func (mgr *WorkStateMgr) Get() WorkState {
	mgr.mu.RLock()
	defer mgr.mu.RUnlock()
	return mgr.state
}

// 工作状态管理-状态是否存在
func (mgr *WorkStateMgr) Has(s WorkState) bool {
	mgr.mu.RLock()
	defer mgr.mu.RUnlock()
	return mgr.state&s != 0
}
