import com.atlassian.jira.component.ComponentAccessor
import com.opensymphony.workflow.InvalidInputException

def customFieldManager = ComponentAccessor.customFieldManager
def attachmentManager = ComponentAccessor.attachmentManager


// ======================
// 获取字段
// ======================

def ecuCategoryField = customFieldManager.getCustomFieldObject("customfield_10800")
def tcuSoftwareLayerField = customFieldManager.getCustomFieldObject("customfield_10801")
def mcuSoftwareLayerField = customFieldManager.getCustomFieldObject("customfield_10802")
def supplierInvolvedField = customFieldManager.getCustomFieldObject("customfield_10803")
def workSplitField = customFieldManager.getCustomFieldObject("customfield_10804")


def ecuCategory = issue.getCustomFieldValue(ecuCategoryField)
def tcuSoftwareLayer = issue.getCustomFieldValue(tcuSoftwareLayerField)
def mcuSoftwareLayer = issue.getCustomFieldValue(mcuSoftwareLayerField)
def supplierInvolved = issue.getCustomFieldValue(supplierInvolvedField)
def workSplit = issue.getCustomFieldValue(workSplitField)


if(!ecuCategory){
    throw new InvalidInputException("ECU Category不能为空")
}


// ======================
// 根据规则计算需要CSV
// ======================

def requiredCsv = []


if(ecuCategory.value in ["TCU","TCU & MCU"]){

    if(tcuSoftwareLayer?.value in ["ASW","ASW & BSW"]){
        requiredCsv << "tcu-asw-components.csv"
    }

    if(tcuSoftwareLayer?.value in ["BSW","ASW & BSW"]){
        requiredCsv << "tcu-bsw-supplier-components.csv"
    }
}


if(ecuCategory.value in ["MCU","TCU & MCU"]){

    if(mcuSoftwareLayer?.value in ["ASW","ASW & BSW"]){
        requiredCsv << "mcu-asw-components.csv"
    }


    if(
        mcuSoftwareLayer?.value in ["BSW","ASW & BSW"] &&
        (
            supplierInvolved?.value=="No" ||
            workSplit?.value=="Yes"
        )
    ){
        requiredCsv << "mcu-bsw-components.csv"
    }


    if(
        mcuSoftwareLayer?.value in ["BSW","ASW & BSW"] &&
        supplierInvolved?.value=="Yes"
    ){
        requiredCsv << "mcu-bsw-supplier-components.csv"
    }
}


requiredCsv = requiredCsv.unique()


log.error("需要上传组件CSV:${requiredCsv}")


// ======================
// 校验附件
// ======================

def uploadedFiles = attachmentManager.getAttachments(issue)
        .collect{
            it.filename.toLowerCase()
        }


def missingFiles = requiredCsv.findAll{
    !uploadedFiles.contains(it)
}


if(!missingFiles.isEmpty()){

    throw new InvalidInputException(
        "缺少组件配置文件,请上传以下CSV文件:\n" +
        missingFiles.join("\n")
    )
}


log.error("组件CSV校验通过")