package com.yunfeiyun.agmp.common.web.system.service.impl;

import com.yunfeiyun.agmp.common.constant.UserConstants;
import com.yunfeiyun.agmp.common.web.system.domain.SysRes;
import com.yunfeiyun.agmp.common.web.system.mapper.SysResMapper;
import com.yunfeiyun.agmp.common.web.system.service.ISysResService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 资源Service业务层处理
 * 
 * @author 杨晓辉
 * @date 2023-05-08
 */
@Service
public class SysResServiceImpl implements ISysResService
{
    @Resource
    private SysResMapper sysResMapper;

    /**
     * 查询资源
     * 
     * @param resId 资源主键
     * @return 资源
     */
    @Override
    public SysRes selectSysResByResId(String resId)
    {
        SysRes  sysRes = sysResMapper.selectSysResByResId(resId);
        return SysRes.cloud(sysRes);
    }

    /**
     * 查询资源列表
     * 
     * @param sysRes 资源
     * @return 资源
     */
    @Override
    public List<SysRes> selectSysResList(SysRes sysRes)
    {
        List<SysRes> sysResList =  sysResMapper.selectSysResList(sysRes);
        return SysRes.cloud(sysResList);
    }


    /**
     * 查询过期资源列表
     *
     * @return 资源集合
     */
    @Override
    public List<SysRes> selectSysResExpire(){
        return sysResMapper.selectSysResExpire();
    }

    /**
     * 查询资源列表
     *
     * @param resBusid 资源
     * @param  resBiztype
     * @return 资源
     */
    @Override
    public List<SysRes> selectResByBusId(String resBusid, String resBiztype)
    {
        if(UserConstants.INVALID.equals(resBusid) || resBusid ==null ||  UserConstants.NORMAL.equals(resBusid)) return new ArrayList<>();
        List<SysRes> sysResList = sysResMapper.selectResByBusId(resBusid,resBiztype,null);
        return SysRes.cloud(sysResList);
    }

    /**
     * 查询资源列表
     *
     * @param resBusids 资源
     * @param  resBiztype
     * @return 资源
     */
    @Override
    public List<SysRes> selectResByBusIdes(String[] resBusids, String resBiztype){
        List<SysRes> sysResList = sysResMapper.selectResByBusIdes(resBusids,resBiztype);
        return SysRes.cloud(sysResList);
    }

    /**
     * 查询资源列表
     *
     * @param resBusids 资源
     * @param  resBiztype
     * @return 资源
     */
    @Override
    public List<SysRes> selectResByBusIds(List<String> resBusids,String resBiztype){
        List<SysRes> sysResList =  sysResMapper.selectResByBusIds(resBusids,resBiztype);
        return SysRes.cloud(sysResList);
    }

    @Override
    public List<SysRes> selectResByBusId(String resBusid, String resBiztype, String mediaType) {
        List<SysRes> sysResList =  sysResMapper.selectResByBusId(resBusid,resBiztype,mediaType);
        return SysRes.cloud(sysResList);
    }


    /**
     * 查询资源列表
     *
     * @param resIds 资源
     * @return 资源
     */
    @Override
    public List<SysRes> selectResByResIds(List<String> resIds)
    {
        List<SysRes> sysResList =  sysResMapper.selectResByResIds(resIds);
        return SysRes.cloud(sysResList);
    }


    /**
     * 查询资源列表
     *
     * @param resIds 资源
     * @return 资源
     */
    @Override
    public List<SysRes> selectResByResIdsV2(List<String> resIds)
    {
        List<SysRes> sysResList =  sysResMapper.selectResByResIds(resIds);
        return sysResList;
    }

    /**
     * 查询资源列表
     *
     * @param resIds 资源
     * @return 资源
     */
    @Override
    public List<SysRes> selectResByResIdes(String[] resIds){
        List<SysRes> sysResList =  sysResMapper.selectResByResIdes(resIds);
        return SysRes.cloud(sysResList);
    }

    /**
     * 查询资源的数量
     *
     * @param sysRes 资源
     * @return 结果
     */
    public int selectCountResByBusId(SysRes sysRes){
        return sysResMapper.selectCountResByBusId(sysRes);
    }

    /**
     * 新增资源
     * 
     * @param sysRes 资源
     * @return 结果
     */
    @Override
    public int insertSysRes(SysRes sysRes)
    {
        //if(sysRes.getResId() == null || "".equals(sysRes.getResId()))  sysRes.setResId(sysRes.getId());
        return sysResMapper.insertSysRes(sysRes);
    }

    /**
     * 批量新增资源
     *
     * @param sysRes 资源
     * @return 结果
     */
    @Override
    public List<SysRes> insertSysReses(List<SysRes> sysRes){
        return sysResMapper.insertSysReses(sysRes);
    }


    /**
     * 修改资源
     * 
     * @param sysRes 资源
     * @return 结果
     */
    @Override
    public int updateSysRes(SysRes sysRes)
    {
        return sysResMapper.updateSysRes(sysRes);
    }


    @Override
    public void updateSysRes(List<String> resIdsOld, List<String> resIdsNew, String resBusId) {
        List<String> resIdsOld2 = new ArrayList<>();
        resIdsOld2.addAll(resIdsOld);
        List<String> resIdsNew2 = new ArrayList<>();
        resIdsNew2.addAll(resIdsNew);
        //获取删除掉的图片id
        resIdsOld2.removeAll(resIdsNew);
        //获取新增的图片id
        resIdsNew2.removeAll(resIdsOld);
        /*删除图片*/
        if (resIdsOld2.size() > 0) {
//            List<SysRes> sysResOldList = sysResMapper.selectResByResIds(resIdsOld2);
//            for (SysRes res : sysResOldList) {
//                String resUrl = res.getResUrl();
//                File file = new File(resUrl);
//                if (file.exists()) {
//                    file.delete();
//                }
//            }
            String[] array = resIdsOld2.toArray(new String[resIdsOld2.size()]);
            sysResMapper.deleteSysResByResIds(array);
        }
        //更新新增的图片
        if (resIdsNew2.size() > 0) {
            Map<String, Object> params = new HashMap<>();
            params.put("list", resIdsNew2);
            params.put("resBusId", resBusId);
            sysResMapper.updateResBusIdByResIds(params);
        }


    }

    @Override
    public int updateSysResByResIds(List<SysRes> sysRes){
        return sysResMapper.updateSysResByResIds(sysRes);
    }

    @Override
    public int updateSysResByResIdes(String[] resIds , String resBusId){
        return sysResMapper.updateSysResByResIdes(resIds,resBusId);
    }

    @Override
    public int updateSysResByResIdls(List<String> resIds , String resBusId){
        return sysResMapper.updateSysResByResIdls(resIds,resBusId);
    }

    /**
     * 批量删除资源
     * 
     * @param resIds 需要删除的资源主键
     * @return 结果
     */
    @Override
    public int deleteSysResByResIds(String[] resIds)
    {
        return sysResMapper.deleteSysResByResIds(resIds);
    }


    /**
     * 批量删除资源
     *
     * @param resIds 需要删除的资源
     * @return 结果
     */
    @Override
    public int deleteSysResls(List<String> resIds)
    {
       return sysResMapper.deleteSysResls(resIds);
    }



    /**
     * 批量删除资源
     *
     * @param resBusIds 需要删除的资源
     * @return 结果
     */
    @Override
    public int deleteSysResbs(String[] resBusIds)
    {
        return sysResMapper.deleteSysResbes(resBusIds);
    }


    @Override
    public int deleteSysResbs(List<String> resBusIds)
    {
        return sysResMapper.deleteSysResbls(resBusIds);
    }


    /**
     * 删除资源信息
     *
     * @param sysRes 资源主键
     * @return 结果
     */
    @Override
    public int deleteSysResList(SysRes[] sysRes){
        return sysResMapper.deleteSysResess(sysRes);
    }


    /**
     * 删除资源信息
     *
     * @param sysRes 资源主键
     * @return 结果
     */
    @Override
    public int deleteSysResList(List<SysRes> sysRes){
        return sysResMapper.deleteSysReslss(sysRes);
    }

    /**
     * 清理资源信息
     *
     * @param sysRes 资源主键
     * @return 结果
     */
    @Override
    public int cleanSysRes(List<SysRes> sysRes){
        return sysResMapper.cleanSysRes(sysRes);
    }

    /**
     * 删除资源信息
     * 
     * @param resId 资源主键
     * @return 结果
     */
    @Override
    public int deleteSysResByResId(String resId)
    {
        return sysResMapper.deleteSysResByResId(resId);
    }


    /**
     * 保存或更新资源
     *
     * @param sysRes 资源对象
     * @return 结果
     */
    @Override
    public int saveAvatarByUserId(SysRes sysRes)
    {
        if(sysResMapper.selectCountResByBusId(sysRes) > 0){
            return sysResMapper.updateResByBusId(sysRes);
        }else{
            return sysResMapper.insertSysRes(sysRes);
        }

    }

}
