package com.skr.mdm.api.app.service;

import com.skr.mdm.bean.qo.FileChunkQO;
import com.skr.mdm.bean.qo.StrategyUserQO;
import com.skr.mdm.bean.qo.app.*;
import com.skr.mdm.dto.LoginAdminDTO;
import com.skr.mdm.result.ResponseResult;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

public interface MdmAppStoreService {

    /**
     * 应用商店列表
     * @param appStoreSearchQO
     * @param loginAdminDTO
     * @return
     */
    ResponseResult listApp(AppStoreSearchQO appStoreSearchQO, LoginAdminDTO loginAdminDTO);

    /**
     * 应用版本信息
     * @param appId
     * @return
     */
    ResponseResult getAppVersionInfo(Integer appId);

    /**
     * 获取全部应用
     * @param appName
     * @param loginAdminDTO
     * @return
     */
    ResponseResult listAllAppName(String appName, LoginAdminDTO loginAdminDTO);

    /**
     * 检查文件是否存在，如果存在则跳过该文件的上传，如果不存在，返回需要上传的分片集合
     * @param chunkQO
     * @return
     */
    ResponseResult checkChunkExist(FileChunkQO chunkQO);


    /**
     * 上传文件分片
     *
     * @param chunkQO
     * @param loginAdminDTO
     */
    ResponseResult uploadChunk(FileChunkQO chunkQO, LoginAdminDTO loginAdminDTO);


    /**
     * 解析新应用
     * @param file
     * @param loginAdminDTO
     * @return
     */
    ResponseResult analyticNewApp(MultipartFile file, LoginAdminDTO loginAdminDTO);

    /**
     * 上传应用图标
     *
     * @param file
     * @param appId
     * @param loginAdminDTO
     * @return
     */
    ResponseResult uploadAppIcon(MultipartFile file, Integer appId, LoginAdminDTO loginAdminDTO);

    /**
     * 解析应用新版本
     *
     * @param file
     * @param appId
     * @param loginAdminDTO
     * @return
     */
    ResponseResult analyticAppNewVersion(MultipartFile file, Integer appId, LoginAdminDTO loginAdminDTO);

    /**
     * 版本升级
     * @param appStoreVersionUpgradeQO
     * @param loginAdminDTO
     * @return
     */
    ResponseResult upgradeVersion(AppStoreVersionUpgradeQO appStoreVersionUpgradeQO, LoginAdminDTO loginAdminDTO);

    /**
     * 添加应用
     * @param mdmAppStoreAddQO
     * @param loginAdminDTO
     * @return
     */
    ResponseResult addApp(MdmAppStoreAddQO mdmAppStoreAddQO, LoginAdminDTO loginAdminDTO);

    /**
     * 编辑应用
     * @param mdmAppStoreUpdateQO
     * @param loginAdminDTO
     * @return
     */
    ResponseResult updateApp(MdmAppStoreUpdateQO mdmAppStoreUpdateQO, LoginAdminDTO loginAdminDTO);

    /**
     * 编辑轻应用
     * @param mdmLightAppUpdateQO
     * @param loginAdminDTO
     * @return
     */
    ResponseResult updateLightApp(MdmLightAppUpdateQO mdmLightAppUpdateQO, LoginAdminDTO loginAdminDTO);

    /**
     * 删除应用
     * @param appIdList
     * @param loginAdminDTO
     * @return
     */
    ResponseResult deleteApp(List<Integer> appIdList, LoginAdminDTO loginAdminDTO);

    /**
     * 删除应用版本
     * @param appVersionIdList
     * @param loginAdminDTO
     * @return
     */
    ResponseResult deleteAppVersion(List<Integer> appVersionIdList, LoginAdminDTO loginAdminDTO);

    /**
     * 应用启用禁用
     * @param appId
     * @param state
     * @param loginAdminDTO
     * @return
     */
    ResponseResult onOrOffApp(Integer appId, Integer state, LoginAdminDTO loginAdminDTO);

    /**
     * 应用版本启用禁用
     * @param appVersionId
     * @param state
     * @param loginAdminDTO
     * @return
     */
    ResponseResult onOrOffAppVersion(Integer appVersionId, Integer state, LoginAdminDTO loginAdminDTO);

    /**
     * 获取指定用户
     * @param strategyUserQO
     * @return
     */
    ResponseResult listAppUser(StrategyUserQO strategyUserQO);

    /**
     * 获取指定部门
     * @param strategyUserQO
     * @return
     */
    ResponseResult listAppDept(StrategyUserQO strategyUserQO);

    /**
     * 获取进度条
     * @param fileSize
     * @param sessionId
     * @param loginAdminDTO
     * @return
     * @throws InterruptedException
     */
    ResponseResult getFileUploadProgress(String fileSize, String sessionId, LoginAdminDTO loginAdminDTO);

}
