package com.fdkankan.modeling.service.impl;

import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fdkankan.common.constant.ConstantFilePath;
import com.fdkankan.common.constant.RecStatus;
import com.fdkankan.common.constant.TbStatus;
import com.fdkankan.common.util.FileUtils;
import com.fdkankan.modeling.entity.ScenePro;
import com.fdkankan.modeling.entity.SceneProExt;
import com.fdkankan.modeling.mapper.ISceneProMapper;
import com.fdkankan.modeling.service.ISceneProExtService;
import com.fdkankan.modeling.service.ISceneProService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * pro场景表 服务实现类
 * </p>
 *
 * @author dengsixing
 * @since 2021-12-23
 */
@Service
public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro> implements ISceneProService {

    @Autowired
    private ISceneProExtService sceneProExtService;

    @Override
    public ScenePro findBySceneNum(String projectNum) {
        List<ScenePro> list = this.list(new QueryWrapper<ScenePro>()
                .eq("tb_status", TbStatus.VALID.code())
                .eq("rec_status", RecStatus.VALID.code())
                .eq("scene_code", projectNum));
        if(CollUtil.isEmpty(list)){
            return null;
        }
        return list.get(0);
    }

    @Override
    public void updateTime(String projectNum, Long space, int payStatus, String videos, long computeTime) {
        ScenePro scenePro = this.findBySceneNum(projectNum);
        if(scenePro == null){
            return;
        }
        SceneProExt sceneProExt = sceneProExtService.getBySceneProId(scenePro.getId());
        if( sceneProExt == null){
            return;
        }
        scenePro.setVideos(videos);
        this.updateById(scenePro);

        sceneProExt.setSceneStatus(-2);
        sceneProExt.setSpace(space);
        sceneProExt.setComputeTime(computeTime);
        sceneProExtService.updateById(sceneProExt);
    }

    @Override
    public void tempScenes(List<Long> lockedIds) {
        if (lockedIds == null || lockedIds.size() == 0){
            return;
        }
        for (Long id : lockedIds){
            SceneProExt sceneProExt = sceneProExtService.getBySceneProId(id);
            sceneProExt.setPayStatus(-2);
            sceneProExtService.updateById(sceneProExt);

            ScenePro sceneProEntity = this.getById(id);
//            sceneProEntity.setPayStatus(-2);
//            this.updateById(sceneProEntity);

            try{
                Map<String, Object> map = new HashMap<>();
                map.put("payStatus", -2);
                FileUtils.writeJsonFile(ConstantFilePath.SCENE_PATH + "data/data" + sceneProEntity.getSceneCode() + "/scene.json", map);
            }catch (Exception e){
                e.printStackTrace();
            }

        }
    }
}
