package com.aucma.base.service;

import java.util.List;
import java.util.Map;
import com.aucma.base.domain.ProcessSnapshot;
import com.aucma.base.domain.BaseDeviceParamVal;

/**
 * 工艺快照Service接口
 *
 * @author Cascade
 * @date 2026-01-19
 */
public interface IProcessSnapshotService {
    /**
     * 查询工艺快照
     *
     * @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 snapshotId 快照ID
     * @return 快照详情（含参数）
     */
    public ProcessSnapshot selectSnapshotDetail(Long snapshotId);

    /**
     * 对比两个快照的参数差异
     *
     * @param snapshotId1 快照ID1
     * @param snapshotId2 快照ID2
     * @return 参数对比结果
     */
    public List<Map<String, Object>> compareSnapshots(Long snapshotId1, Long snapshotId2);

    /**
     * 创建调试备份
     *
     * @param deviceCode 设备编号
     * @param moldCode 模具编号
     * @param productCode 产品编号
     * @param backupName 备份名称
     * @return 结果
     */
    public int createDebugBackup(String deviceCode, String moldCode, String productCode, String backupName);

    /**
     * 查询调试备份列表
     *
     * @param moldCode 模具编号
     * @param deviceCode 设备编号
     * @param productCode 产品编号
     * @return 备份列表
     */
    public List<ProcessSnapshot> getDebugBackups(String moldCode, String deviceCode, String productCode);

    /**
     * 获取默认备份
     *
     * @param moldCode 模具编号
     * @param deviceCode 设备编号
     * @param productCode 产品编号
     * @return 默认备份
     */
    public ProcessSnapshot getDefaultBackup(String moldCode, String deviceCode, String productCode);

    /**
     * 设为默认备份
     *
     * @param snapshotId 快照ID
     * @return 结果
     */
    public int setDefaultBackup(Long snapshotId);

    /**
     * 应用备份（获取备份参数详情）
     *
     * @param snapshotId 快照ID
     * @return 快照详情（含参数）
     */
    public ProcessSnapshot applyDebugBackup(Long snapshotId);
}
