package vqdcms

type VqdTaskStatus int

const (
	TaskStatusStopped VqdTaskStatus = iota
	TaskStatusRunning
	TaskStatusFailed
)
const NXU_VQD_DISABLE_ALL = 0x00000000      /* 所有功能关闭 */
const NXU_VQD_ENABLE_COLOR = 0x00000001     /* 偏色检测 */
const NXU_VQD_ENABLE_LGTDARK = 0x00000002   /* 过亮过暗检测 */
const NXU_VQD_ENABLE_CLARITY = 0x00000004   /* 模糊检测 */
const NXU_VQD_ENABLE_NOISE = 0x0000008      /* 噪声检测 */
const NXU_VQD_ENABLE_CONTRAST = 0x00000010  /* 对比度检测 */
const NXU_VQD_ENABLE_OCCLUSION = 0x00000020 /* 遮挡检测 */
const NXU_VQD_ENABLE_BLUE = 0x00000040      /* 蓝屏检测 */
const NXU_VQD_ENABLE_SHARK = 0x00000100     /* 抖动检测 */
const NXU_VQD_ENABLE_FREEZE = 0x00000200    /* 冻结检测 */
const NXU_VQD_ENABLE_MOSAIC = 0x00000400    /* 马赛克检测 NEW: 新增深度学习版本 20240717*/
const NXU_VQD_ENABLE_FLOWER = 0x00000800    /* 花屏检测 NEW: 新增深度学习版本 20240717*/
const NXU_VQD_ENABLE_ALL = 0x0FFFFFFF       /* 所有功能打开 */

var TypeMap = map[string]int{
	"vqd_color":     NXU_VQD_ENABLE_COLOR,
	"vqd_lgt_dark":  NXU_VQD_ENABLE_LGTDARK,
	"vqd_clarity":   NXU_VQD_ENABLE_CLARITY,
	"vqd_noise":     NXU_VQD_ENABLE_NOISE,
	"vqd_contrast":  NXU_VQD_ENABLE_CONTRAST,
	"vqd_occlusion": NXU_VQD_ENABLE_OCCLUSION,
	"vqd_blue":      NXU_VQD_ENABLE_BLUE,
	"vqd_shark":     NXU_VQD_ENABLE_SHARK,
	"vqd_freeze":    NXU_VQD_ENABLE_FREEZE,
	"vqd_mosaic":    NXU_VQD_ENABLE_MOSAIC,
	"vqd_flower":    NXU_VQD_ENABLE_FLOWER,
}

func GetAlgoEnable(str []string) int {
	v := NXU_VQD_DISABLE_ALL
	if len(str) <= 0 {
		return v
	}
	for i := 0; i < len(str); i++ {
		if vqd, ok := TypeMap[str[i]]; ok {
			v |= vqd
		}
	}
	return v
}

/**
 * 如果返回的是多个异常类型, 则可以用与或来确定具体异常类型
 */
const NXU_VQD_NORMAL = 0x00000000        /* 正常, 无异常 */
const NXU_VQD_ABN_COLORDEV = 0x00000001  /* 偏色异常 */
const NXU_VQD_ABN_LIGHT = 0x00000002     /* 过亮异常 */
const NXU_VQD_ABN_DARK = 0x00000004      /* 过暗异常 */
const NXU_VQD_ABN_CLARITY = 0x00000008   /* 清晰度异常 */
const NXU_VQD_ABN_NOISE = 0x00000010     /* 噪声异常 */
const NXU_VQD_ABN_CONTRAST = 0x00000020  /* 对比度异常 */
const NXU_VQD_ABN_OCCLUSION = 0x00000040 /* 遮挡异常 */
const NXU_VQD_ABN_BLUE = 0x00000080      /* 蓝屏异常 */
const NXU_VQD_ABN_SHARK = 0x00000100     /* 抖动异常 */
const NXU_VQD_ABN_FREEZE = 0x00000200    /* 冻结异常 */
const NXU_VQD_ABN_MOSAIC = 0x00000400    /* 马赛克异常 NEW: 新增深度学习版本 20240717*/
const NXU_VQD_ABN_FLOWER = 0x00000800    /* 花屏异常 NEW: 新增深度学习版本 20240717*/
const NXU_VQD_ABN_ALL = 0x0FFFFFFF       /* 所有的异常 */
const NXU_VQD_ABN_UNKNOWN = 0xF0000000   /* 序列不满时, 返回位置 */

var ALNORMAL_NAMES = map[int]string{
	NXU_VQD_NORMAL:        "无异常",
	NXU_VQD_ABN_COLORDEV:  "偏色异常",
	NXU_VQD_ABN_LIGHT:     "过亮异常",
	NXU_VQD_ABN_DARK:      "过暗异常",
	NXU_VQD_ABN_CLARITY:   "清晰度异常",
	NXU_VQD_ABN_NOISE:     "噪声异常",
	NXU_VQD_ABN_CONTRAST:  "对比度异常",
	NXU_VQD_ABN_OCCLUSION: "遮挡异常",
	NXU_VQD_ABN_BLUE:      "蓝屏异常",
	NXU_VQD_ABN_SHARK:     "抖动异常",
	NXU_VQD_ABN_FREEZE:    "冻结异常",
	NXU_VQD_ABN_MOSAIC:    "马赛克异常",
	NXU_VQD_ABN_FLOWER:    "花屏异常",
	NXU_VQD_ABN_ALL:       "所有的异常",
	NXU_VQD_ABN_UNKNOWN:   "序列不满",
}

type Children struct {
	Name        string      `json:"name"`
	Type        string      `json:"type"`
	Placeholder string      `json:"placeholder"`
	Value       interface{} `json:"value"`
}

type ArithmeticType struct {
	Name     string     `json:"name"`
	Type     string     `json:"type"`
	Children []Children `json:"children"`
}
