import java.lang.Boolean
import java.util.Map;
import java.util.List;

import com.onresolve.scriptrunner.db.DatabaseUtil;

import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.issue.fields.CustomField;

import com.atlassian.jira.issue.customfields.manager.OptionsManager;
import com.atlassian.jira.issue.customfields.option.Option;
import com.atlassian.jira.issue.customfields.option.Options;
import com.atlassian.jira.issue.fields.config.FieldConfig;
import com.atlassian.jira.issue.fields.config.FieldConfigScheme;
import com.atlassian.jira.issue.fields.config.manager.FieldConfigSchemeManager;
import com.atlassian.jira.issue.issuetype.IssueType;
import com.atlassian.jira.project.Project;


DatabaseUtil.withSql('SelectCf') { sql ->
    List<Map> list = new ArrayList();

    // hktx 查询中间表
    list.addAll(sql.rows('select cmdb_name,jira_name,cmdb_status from myoption'))

    // hktx 需要维护的选择类自定义字段的ID值: 相关系统,关联系统
    // 相关系统
    CustomField customField = ComponentAccessor.getCustomFieldManager().getCustomFieldObject(10420L);//
    //关联系统
    //CustomField customField = ComponentAccessor.getCustomFieldManager().getCustomFieldObject(11101L);//


    for(int i=0;i<list.size();i++){
        Map<String,Object> keyMap = (Map)list.get(i);
        log.debug("============================== begin ");
        log.debug(keyMap);
        //log.debug(keyMap.get("id"));
        //log.debug(keyMap.get("cmdb_name"));
        //log.debug(keyMap.get("jira_name"));
        //log.debug(keyMap.get("cmdb_status"));

      

        Long id = (Long)keyMap.get("id");
        String cmdb_name = (String)keyMap.get("cmdb_name");
        if(cmdb_name ==null){
            continue;
        }

        updateOption(keyMap,customField);
        log.debug("============================== end ");
    }

}


def   updateOption(Map<String,Object> keyMap,CustomField customField) {
        
        //确定表中的数据列以及数据类型

        String optionvalue = (String)keyMap.get("cmdb_name");

	//主要通过optionvalueold它,来识别是否已经在JIRA中创建
	//这空或者与在jira中对比没有找到,都为新增
        String optionvalueold = (String)keyMap.get("jira_name"); 
        String cmdb_status = (String)keyMap.get("cmdb_status");

	boolean disabled = false;

	if("停运".equalsIgnoreCase(cmdb_status)){
		disabled = true;
	}

        try {

            OptionsManager  optionsManager = ComponentAccessor.getOptionsManager();
            

            //获得自定义字段创建的,上下文方案
            FieldConfigSchemeManager fieldConfigSchemeManager = ComponentAccessor.getFieldConfigSchemeManager();
            List<FieldConfigScheme> schemes = fieldConfigSchemeManager.getConfigSchemesForField(customField);

            

            for (int i = 0; i < schemes.size(); i++) { 
                //只对全局的来处理,如果不是全局的,需要相应,project,issuetype的参数。
                if(!schemes.get(i).isGlobal()){
                    continue;
                }
                Option option = null;
                //全局的只有一个
                FieldConfig config = schemes.get(i).getOneAndOnlyConfig();
                Options options =optionsManager.getOptions(config);
                List<Option> optionList =options.getRootOptions();

   
                for(int m=0;m<optionList.size();m++){
                    Option optionDb = optionList.get(m);

                    if(optionDb.getValue().equalsIgnoreCase(optionvalueold)){
                        option = optionDb;
                        break;
                    }
                }

                log.debug("find the option : " + option );
                if(option==null){
                    //没有就创建
                    option = optionsManager.createOption(config, null, options.size()+1,optionvalue);
                    optionsManager.setValue(option, optionvalue);
                    log.debug("not find it and created :"+optionvalue+" and result is :"+option);
                }else{
                    //有就更新
                    option.setValue(optionvalue);
                    option.setDisabled(disabled);
                    if(!disabled){
                        optionsManager.enableOption(option);
                    }
                    if(disabled){
                        optionsManager.disableOption(option);
                    }

                    optionsManager.setValue(option, optionvalue);
                    log.debug("find it and update :"+optionvalue+" and result is :"+option);
                }
                option = null;
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
       
    }