package com.aucma.base.mapper;

import java.util.Date;
import java.util.List;
import java.util.Map;
import com.aucma.base.domain.ProcessSnapshot;
import com.aucma.base.domain.BaseDeviceParamVal;
import org.apache.ibatis.annotations.Param;

/**
 * 工艺快照Mapper接口
 *
 * @author Cascade
 * @date 2026-01-19
 */
public interface ProcessSnapshotMapper {
    /**
     * 查询工艺快照
     *
     * @param snapshotId 快照ID
     * @return 工艺快照
     */
    public ProcessSnapshot selectProcessSnapshotBySnapshotId(Long snapshotId);

    /**
     * 查询工艺快照列表
     *
     * @param processSnapshot 查询条件
     * @return 快照列表
     */
    public List<ProcessSnapshot> selectProcessSnapshotList(ProcessSnapshot processSnapshot);

    /**
     * 新增工艺快照
     *
     * @param processSnapshot 快照对象
     * @return 结果
     */
    public int insertProcessSnapshot(ProcessSnapshot processSnapshot);

    /**
     * 修改工艺快照
     *
     * @param processSnapshot 快照对象
     * @return 结果
     */
    public int updateProcessSnapshot(ProcessSnapshot processSnapshot);

    /**
     * 删除工艺快照
     *
     * @param snapshotId 快照ID
     * @return 结果
     */
    public int deleteProcessSnapshotBySnapshotId(Long snapshotId);

    /**
     * 批量删除工艺快照
     *
     * @param snapshotIds 快照ID数组
     * @return 结果
     */
    public int deleteProcessSnapshotBySnapshotIds(Long[] snapshotIds);

    /**
     * 根据快照时间点查询参数值
     *
     * @param deviceCode   设备编号
     * @param snapshotTime 快照时间
     * @return 参数列表
     */
    public List<BaseDeviceParamVal> selectParamsBySnapshotTime(@Param("deviceCode") String deviceCode,
                                                                @Param("snapshotTime") Date snapshotTime);

    /**
     * 对比两个快照的参数差异
     *
     * @param deviceCode    设备编号
     * @param snapshotTime1 快照时间1
     * @param snapshotTime2 快照时间2
     * @return 参数对比结果
     */
    public List<Map<String, Object>> compareSnapshots(@Param("deviceCode") String deviceCode,
                                                       @Param("snapshotTime1") Date snapshotTime1,
                                                       @Param("snapshotTime2") Date snapshotTime2);
}
