package cgmblelib.database.source;

import androidx.lifecycle.LiveData;

import java.util.List;

import cgmblelib.database.entity.PocDevice;
import io.reactivex.functions.Consumer;

/**
 * Created by minyuchun on 2019/10/25.
 *
 * @author minyuchun
 */

public interface SourceDevice extends SourceBase {

    //insertPingIoThread

    /**
     * 插入数据 -- 子线程
     *
     * @param device 数据
     * @return 返回插入的id
     */
    long insertDeviceIoThread(PocDevice device);

    /**
     * 插入数据 -- 子线程
     *
     * @param address 地址
     * @param name    名称
     * @return 返回插入的id
     */
    long insertDeviceIoThread(String address, String name);

    /**
     * 删除数据
     *
     * @param device 数据
     */
    void deleteDevice(PocDevice device);

    /**
     * 删除所有数据
     */
    void deleteAllDevices();

    void deleteAllDeviceData();

    //更新

    /**
     * 跟新数据
     *
     * @param device 数据
     */
    void updateDevice(PocDevice device);

    /**
     * 跟新设备
     *
     * @param device 设备信息
     * @return 跟新的数量
     */
    int updateDeviceIoThread(PocDevice device);

    /**
     * 获取设备信息
     *
     * @return 设备
     */
    PocDevice getLatestDeviceIoThread();

    /**
     * 获取数据信息 -- 持久化
     *
     * @return 数据持久化
     */
    LiveData<PocDevice> getLiveDataLatestDeviceIoThread();

    /**
     * 根据设备id获取设备
     *
     * @param deviceId 设备ID
     * @return 设备信息
     */
    PocDevice getDeviceByIdIoThread(int deviceId);

    /**
     * 按照地址分类发射器
     *
     * @return 不同地址的发射器
     */
    List<PocDevice> getDeviceListGroupByAddressIoThread();

    /**
     * 获取该地址的所有发射器
     *
     * @param address 发射器地址
     * @return 该地址的所有发射器
     */
    List<PocDevice> getDeviceListByAddressIoThread(String address);

    /**
     * 获取最新的设备数据 -- 持久化
     *
     * @param consumer 回调
     */
    void getLatestFlowableDevice(Consumer<PocDevice> consumer);

    /**
     * 获取设备信息
     *
     * @return 设备
     */
    PocDevice getLatestDeviceIoThread(String address);
}
