package com.persagy.adm.server.custom.service.impl.check_update;

import org.apache.commons.compress.utils.Lists;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.List;
@Component
public class CheckUpdateChain implements CheckUpdate{
    @Autowired
    AdmProblemCheckUpdate admProblemCheck;
    @Autowired
    AdmPipeCheckUpdate admPipeCheckUpdate;
    @Autowired
    AdmJobSpaceCheckUpdate admJobSpaceCheckUpdate;
    @Autowired
    AdmCadCheckUpdate admCadCheckUpdate;
    @Autowired
    AdmFileCheckUpdate admFileCheckUpdate;
    @Autowired
    AdmQrCodeCheckUpdate admQrCodeCheckUpdate;
    @Autowired
    AdmServerAreaCheckUpdate admServerAreaCheckUpdate;
    @Autowired
    BdtpObjectCheckUpdate bdtpObjectCheckUpdate;
    @Autowired
    BdtpObjRelCreateByAppCheckUpdate bdtpObjRelCreateByAppCheckUpdate;
    @Autowired
    MetaSpaceObjRelCheckUpdate metaSpaceObjRelCheckUpdate;


    static List<CheckUpdate> checkUpdates;

    @PostConstruct
    public void init(){
        checkUpdates = Lists.newArrayList();
        // 核查问题
        checkUpdates.add(admProblemCheck);
        // 管道数据
        checkUpdates.add(admPipeCheckUpdate);
        // 任务数据
        checkUpdates.add(admJobSpaceCheckUpdate);
        // cad图纸
        checkUpdates.add(admCadCheckUpdate);
        // 文件附件
        checkUpdates.add(admFileCheckUpdate);
        // 二维码
        checkUpdates.add(admQrCodeCheckUpdate);
        // 服务区域
        checkUpdates.add(admServerAreaCheckUpdate);
        // 对象数据
        checkUpdates.add(bdtpObjectCheckUpdate);
        // app端创建关系数据
        checkUpdates.add(bdtpObjRelCreateByAppCheckUpdate);
        // 元空间关系数据
        checkUpdates.add(metaSpaceObjRelCheckUpdate);
    }

    @Override
    public boolean doCheck(CheckUpdateContext hasUpdateReq) {
        for (CheckUpdate checkUpdate : checkUpdates){
            if (checkUpdate.doCheck(hasUpdateReq)){
                return true;
            }
        }
        return false;
    }
}
