package com.tuoheng.admin.service.inspection.query.handle;

import com.tuoheng.admin.entity.Dept;
import com.tuoheng.admin.entity.User;
import com.tuoheng.admin.enums.InspectionStatusEnum;
import com.tuoheng.admin.enums.InspectionTypeEnum;
import com.tuoheng.admin.enums.DataPermissionEnum;
import com.tuoheng.admin.vo.inspection.InspectionVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

@Slf4j
@Service("executeHandle")
public class ExecuteHandle implements GenerateInspectionFieldHander {

    private GenerateInspectionFieldHander handler;

    @Override
    public void setNextHandler(GenerateInspectionFieldHander handler) {
        this.handler = handler;
    }

    /**
     *  当处于任务待飞行状态时显示
     *      1)、仅巡检方式为机场巡逻的任务有此功能
     *      2)、管理员可对本部门的任务执行此操作
     *      3)、普通用户可对自己创建的任务执行此操作
     *
     * @param inspectionVo
     */
    @Override
    public void handler(User user, Dept dept, InspectionVo inspectionVo) {
//        log.info("处理立即执行字段");
        if (InspectionStatusEnum.WAIT_FLIGHT.getCode() != inspectionVo.getStatus()) {
            if (null != handler) {
                handler.handler(user, dept, inspectionVo);
            }
            return;
        }

        if (InspectionTypeEnum.AIRPORT.getCode() != inspectionVo.getInspectionType()) {
            if (null != handler) {
                handler.handler(user, dept, inspectionVo);
            }
            return;
        }

        if (DataPermissionEnum.ALL.getCode() == user.getDataPermission()) {
            // 超级管理员不能执行任务操作
            inspectionVo.setExecute(false);
        } else if (DataPermissionEnum.DEPT_AND_SUB_DEPT.getCode() == user.getDataPermission()) {
            // 管理员可对本部门的任务执行此操作
            if (user.getDeptId().equals(inspectionVo.getDeptId())) {
                if (1 == inspectionVo.getExecutionStatus()) {
                    inspectionVo.setExecute(true);
                }
            }
        } else if (DataPermissionEnum.DEPT.getCode() == user.getDataPermission()) {
            // 普通用户可对自己创建的任务执行此操作
            if (user.getId().equals(inspectionVo.getCreateUser())) {
                inspectionVo.setExecute(true);
            }
        }
        if (null != handler) {
            handler.handler(user, dept, inspectionVo);
        }
    }
}
