package com.securitycontrol.background.service.impl;

import com.securitycontrol.background.mapper.SourceFileMapper;
import com.securitycontrol.background.service.SourceFileService;
import com.securitycontrol.common.core.domain.Result;
import com.securitycontrol.common.core.utils.aes.ListHelper;
import com.securitycontrol.common.core.utils.aes.StringHelper;
import com.securitycontrol.common.core.utils.uuid.IdUtils;
import com.securitycontrol.entity.background.vo.EmergencyPlanVo;
import com.securitycontrol.entity.file.FileExportVo;
import com.securitycontrol.entity.system.SystemGlobal;
import com.securitycontrol.system.api.domain.TbSourceFile;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;

/**
 * 系统资源管理进行管理
 * @author 黑子
 */
@Service
@Slf4j
public class SourceFileServiceImpl implements SourceFileService {

    @Autowired
    SourceFileMapper mapper;

    @Override
    public Result<String> addSource(FileExportVo fileExportVo) {
        try {
            if(fileExportVo==null){
                return Result.fail("参数不能为空");
            }
            fileExportVo.setId(IdUtils.getUUId());
            String result=checkData(fileExportVo);
            if (StringHelper.isNotEmpty(result)) {
                return Result.fail(result);
            }
           int num=mapper.addSource(fileExportVo);
            if(num== SystemGlobal.SUCCESS_NUM){
                return Result.ok("上传成功");
            }
            return Result.fail("上传失败,数据未入库");
        }catch (Exception e){
            log.error(e.toString(),e);
        }
        return Result.fail("文件上传出错了");
    }

    @Override
    public Result<String> updateSource(FileExportVo fileExportVo) {
        try{
            if(fileExportVo==null){
                return Result.fail("参数不能为空");
            }
            String result=checkData(fileExportVo);
            if (StringHelper.isNotEmpty(result)) {
                return Result.fail(result);
            }
            int num=mapper.updateSource(fileExportVo);
            if(num== SystemGlobal.SUCCESS_NUM){
                return Result.ok("更新成功");
            }
            return Result.fail("更新失败,数据未入库");
        }catch (Exception e){
            log.error(e.toString(),e);
        }
        return Result.fail("更新出错");
    }

    @Override
    public Result<String> deleteSource(String id) {
       try{
           if(StringHelper.isEmpty(id)){
               return Result.fail("参数不能为空");
           }
           List<String> ids= Arrays.asList(id.split("@"));
           AtomicBoolean isB= new AtomicBoolean(true);
           ids.forEach(fileId->{
               int num=mapper.deleteSource(fileId);
               if(num!=SystemGlobal.SUCCESS_NUM){
                   isB.set(false);
               }
           });
           if(isB.get()){
               return Result.ok("删除成功");
           }
           return Result.fail("删除失败,部分数据不存在");
       }catch (Exception e){
           log.error(e.toString(),e);
       }
        return Result.fail("删除出错");
    }

    @Override
    public Result<String> addSourceList(List<Object> list,String id,String sourceType,String fileType) {
        try{
            if(ListHelper.isEmpty(list)){
                return Result.fail("参数不能为空");
            }
            List<FileExportVo> array=new ArrayList<>();
            list.forEach(obj->{
                String jsonObject= com.alibaba.fastjson2.JSON.toJSONString(obj);
                FileExportVo fileExportVo= com.alibaba.fastjson2.JSON.parseObject(jsonObject,FileExportVo.class);
                fileExportVo.setSourceId(id);
                fileExportVo.setSourceType(sourceType);
                fileExportVo.setFileType(fileType);
                array.add(fileExportVo);
            });
            AtomicBoolean isB= new AtomicBoolean(true);
            array.forEach(vo->{
                vo.setId(IdUtils.getUUId());
                String result=checkData(vo);
                if (StringHelper.isNotEmpty(result)){
                    isB.set(false);
                }
                int num=mapper.addSource(vo);
                if(num!=SystemGlobal.SUCCESS_NUM){
                    isB.set(false);
                }
            });
            if(isB.get()){
                return Result.ok("新增成功");
            }
            return Result.fail("新增成功,数据未全部入库");
        }catch (Exception e){
            log.error(e.toString(),e);
        }
        return Result.fail("新增失败");
    }

    /**
     * @param sourceId
     * @param sourceType
     * @return
     */
    @Override
    public List<FileExportVo> getSourceList(String sourceId, String sourceType) {
        return mapper.getSourceList(sourceId,sourceType);
    }

    /**
     * @param sourceId
     * @param sourceType
     * @return
     */
    @Override
    public List<TbSourceFile> getTbSourceList(String sourceId, String sourceType) {
        return mapper.getTbSourceList(sourceId,sourceType);
    }


    public String checkData(FileExportVo fileExportVo){
        if(StringHelper.isEmpty(fileExportVo.getSourceId())){
            return "资源id为空";
        }
        if(StringHelper.isEmpty(fileExportVo.getSourceType())){
            return "资源类型为空";
        }
        if(StringHelper.isEmpty(fileExportVo.getFileId())){
            return "文件未上传";
        }
        return null;
    }
}
