package com.aegis.emergency.alert.constant;

import org.apache.commons.lang3.StringUtils;
import lombok.Getter;

/**
 * 警情来源渠道枚举
 * 
 * @author aegis
 */
@Getter
public enum AlertSourceChannel {
    
    /** 122交通事故报警 */
    CALL_122("122", "122交通事故报警"),
    
    /** 12345市民热线 */
    CALL_12345("12345", "12345市民热线"),
    
    /** 110报警电话 */
    CALL_110("110", "110报警电话"),
    
    /** 上级转办 */
    SUPERIOR("superior", "上级转办"),
    
    /** 下级上报 */
    SUBORDINATE("subordinate", "下级上报"),
    
    /** 其他部门转办 */
    OTHER_DEPT("other_dept", "其他部门转办"),
    
    /** 系统监测 */
    MONITOR("monitor", "系统监测"),
    
    /** 媒体舆情 */
    MEDIA("media", "媒体舆情"),
    
    /** 手工录入 */
    MANUAL("manual", "手工录入");
    
    private final String code;
    private final String label;
    
    AlertSourceChannel(String code, String label) {
        this.code = code;
        this.label = label;
    }
    
    /**
     * 根据代码获取枚举
     * 
     * @param code 代码
     * @return 枚举值，如果找不到则返回 null
     */
    public static AlertSourceChannel fromCode(String code) {
        if (StringUtils.isBlank(code)) {
            return null;
        }
        for (AlertSourceChannel channel : values()) {
            if (channel.code.equals(code)) {
                return channel;
            }
        }
        return null;
    }
    
    /**
     * 根据标签获取枚举（用于导入功能）
     * 
     * @param label 标签
     * @return 枚举值，如果找不到则返回 null
     */
    public static AlertSourceChannel fromLabel(String label) {
        if (StringUtils.isBlank(label)) {
            return null;
        }
        for (AlertSourceChannel channel : values()) {
            if (channel.label.equals(label)) {
                return channel;
            }
        }
        return null;
    }
    
    /**
     * 判断是否为电话渠道（122、12345、110）
     * 
     * @return 是否为电话渠道
     */
    public boolean isPhoneChannel() {
        return this == CALL_122 || this == CALL_12345 || this == CALL_110;
    }
}