package vip.xiaonuo.coldchain.core.cache.monitordevice;

/**
 * @author jackzhou
 * @version 1.0
 * @project jfcloud-coldchain
 * @description
 * @date 2024/11/19 17:39:49
 */

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Set;

/**
 * 设备缓存工具类，基于配置动态选择 Redis 缓存或本地缓存
 */
@Component
@RequiredArgsConstructor
public class MonitorDeviceCache {
    private final MonitorDeviceCacheService cacheService;  // 通过缓存接口进行操作

    /**
     * 将设备编号与设备型号缓存到缓存存储中（Redis 或本地）
     *
     * @param deviceCode  设备编号
     * @param deviceModel 设备型号
     */
    public void cacheDevice(String deviceCode, String deviceModel) {
        cacheService.cacheDevice(deviceCode, deviceModel);
    }

    /**
     * 从缓存中获取设备型号
     *
     * @param deviceCode 设备编号
     * @return 设备型号
     */
    public String getDeviceModel(String deviceCode) {
        return cacheService.getDeviceModel(deviceCode);
    }

    /**
     * 判断设备编号是否已经存在于缓存中
     *
     * @param deviceCode 设备编号
     * @return true：存在；false：不存在
     */
    public boolean exists(String deviceCode) {
        return cacheService.exists(deviceCode);
    }

    /**
     * 从缓存中移除设备
     *
     * @param deviceCode 设备编号
     */
    public void removeDevice(String deviceCode) {
        cacheService.removeDevice(deviceCode);
    }

    /**
     * 批量删除符合模式的设备缓存
     *
     * @param pattern 模糊匹配的模式
     */
    public void removeBatch(String pattern) {
        cacheService.removeBatch(pattern);
    }

    /**
     * 获取所有设备缓存的设备编号
     *
     * @return 所有设备编号集合
     */
    public Set<String> getAllDeviceCodes() {
        return cacheService.getAllDeviceCodes();
    }

    /**
     * 获取所有设备缓存的设备型号
     *
     * @return 所有设备型号集合
     */
    public List<String> getAllDeviceModels() {
        return cacheService.getAllDeviceModels();
    }
}

