package com.ruoyi.service.impl;

import com.ruoyi.domain.ReviewDetails;
import com.ruoyi.domain.ReviewKeyPoint;
import com.ruoyi.domain.ReviewScene;
import com.ruoyi.domain.ReviewSceneChangeTask;
import com.ruoyi.mapper.ReviewDetailsMapper;
import com.ruoyi.mapper.ReviewKeyPointMapper;
import com.ruoyi.mapper.ReviewSceneMapper;
import com.ruoyi.service.StrategyReviewSceneChange;
import com.ruoyi.service.ReviewSceneChangeTaskService;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Objects;

@Transactional
@Service
public class StrategyReviewSceneChangeAdd implements StrategyReviewSceneChange, InitializingBean {

    @Autowired
    private StrategyReviewSceneChangeContext strategyReviewSceneChangeContext;
    @Autowired
    private ApplicationContext applicationContext;

    @Autowired
    private ReviewSceneMapper reviewSceneMapper;

    @Autowired
    private ReviewSceneChangeTaskService reviewSceneChangeTaskService;

    @Autowired
    private ReviewKeyPointMapper reviewKeyPointMapper;

    @Autowired
    private ReviewDetailsMapper reviewDetailsMapper;

    /**
     * 新增审查场景
     * @param reviewSceneChangeTask
     */
    @Override
    public void doChange(ReviewSceneChangeTask reviewSceneChangeTask) {

        if (Objects.equals(reviewSceneChangeTask.getOperationSort(), "ADD_SCENE")) {

            // 保存新增的场景
            ReviewScene reviewScene = new ReviewScene()
                    .setText(reviewSceneChangeTask.getNewText())
                    .setReviewDetailsId(reviewSceneChangeTask.getDetailsId());
            reviewSceneMapper.insert(reviewScene);

            // 为场景变更任务的 场景关联id字段赋值
            reviewSceneChangeTask.setReviewSceneId(reviewScene.getId());
            reviewSceneChangeTaskService.updateById(reviewSceneChangeTask);

        }

        // 保存新增的要点
        if (Objects.equals(reviewSceneChangeTask.getOperationSort(), "ADD_KEYPOINT")) {

            // 要点
            ReviewKeyPoint reviewKeyPoint = new ReviewKeyPoint()
                    .setText(reviewSceneChangeTask.getKeypoint())
                    .setReviewStandardId(reviewSceneChangeTask.getStandardId());
            reviewKeyPointMapper.insert(reviewKeyPoint);

            // 细则
            ReviewDetails reviewDetails = new ReviewDetails()
                    .setText(reviewSceneChangeTask.getDetails())
                    .setReviewKeypointId(reviewKeyPoint.getId());
            reviewDetailsMapper.insert(reviewDetails);
        }

        // 保存新增的细则
        if (Objects.equals(reviewSceneChangeTask.getOperationSort(), "ADD_DETAILS")) {
            // 细则
            ReviewDetails reviewDetails = new ReviewDetails()
                    .setText(reviewSceneChangeTask.getDetails())
                    .setReviewKeypointId(reviewSceneChangeTask.getKeypointId());
            reviewDetailsMapper.insert(reviewDetails);
        }


    }

    @Override
    public void afterPropertiesSet() throws Exception {
        strategyReviewSceneChangeContext.putResource(ReviewSceneChangeTask.OPERATION_ADD, applicationContext.getBean(this.getClass()));
    }
}