type ModelContentConfig = {
	nodeName: string
	type: number
	local_status?: string // 填充自定义状态
	p_nodeNames?: string[] // 填充自定义状态
	childNode: ModelContentConfig | null
	lastNode_local_status?: string // 结束标记状态标记
	conditionNodes?: {
		nodeName: string
		local_status?: string // 填充自定义状态
		conditionList: any[]
		childNode: ModelContentConfig
	}[]
}
type RenderNodes = {
	[key: string]: 0 | 1 // 0已执行 1执行中
}
export const package_modelContentConfig = (data: ModelContentConfig, renderNodes: RenderNodes) => {
	/**local_status: 0: 已执行(success) 1:执行中(error) // 默认未执行(info)*/
	// 通过nodeName 作为唯一值 记录 每个key(nodeName) 对应的childNode 信息
	const nodeNameObj: { [nodeName: string]: ModelContentConfig } = {}
	const fn = (data: ModelContentConfig, p_nodeNames = []) => {
		// console.error(data, p_nodeNames, 'data, p_nodeNames')
		if (!data) return
		data.p_nodeNames = p_nodeNames
		// 记录
		nodeNameObj[data.nodeName] = data
		// const _p_nodeNames = [...p_nodeNames, data.nodeName]
		const _p_nodeNames = [...p_nodeNames, data.nodeName]
		// let has_conditionNodes = false
		if (data.conditionNodes && Array.isArray(data.conditionNodes)) {
			// has_conditionNodes = true
			// 条件分支节点
			data.conditionNodes.forEach(v => {
				fn(v.childNode, _p_nodeNames)
				// fn(v.childNode, [...p_nodeNames])
			})
		}
		if (data.childNode) {
			// _p_nodeNames.push(data.nodeName)
			// const _p_nodeNames = [...p_nodeNames, data.nodeName]
			// if (!has_conditionNodes) {
			// 	_p_nodeNames.push(data.nodeName)
			// }
			// 正常子节点
			fn(data.childNode, _p_nodeNames)
		}
	}
	fn(data)
	/*Object.keys(nodeNameObj).forEach(k => {
		const _o = nodeNameObj[k]
		_o.local_status = 'info'
	})
	// 给需要修改状态的*/
	console.log(nodeNameObj, 'nodeNameObj')
	const local_status_obj = {
		0: 'success', // 已执行
		1: 'error' // 执行中
	}
	let cur_nodeName = ''
	/**local_status: 0: 已执行(success) 1:执行中(error) // 默认未执行(info)*/
	Object.keys(renderNodes).forEach(nodeName => {
		// console.log(nodeName, 'nodeName')
		const local_status = local_status_obj[renderNodes[nodeName]] || ''
		const node = nodeNameObj[nodeName]
		if (node) {
			node.local_status = local_status
			// 执行中的key 提取出来
			if (node.local_status === 'error') {
				cur_nodeName = nodeName
			}
		}
		if (nodeName === '结束') {
			// 给顶级加结束标签状态
			data.lastNode_local_status = local_status_obj[renderNodes[nodeName]]
		}
	})

	/*const cur_actionKey = Object.keys(nodeNameObj).find(nodeName => {
		const node = nodeNameObj[nodeName]
		// 执行中的key 提取出来
		if (node?.local_status === 'error') {
			return true
		}
	})
	console.warn(cur_actionKey, '当前标红 cur_actionKey')
	*/
	const curNode = nodeNameObj[cur_nodeName] as ModelContentConfig
	console.warn('当前标红 curNode', curNode)
	// 如果有执行中的 node 给父级做状态渲染
	if (curNode) {
		const p_nodeNames = curNode.p_nodeNames || []
		if (p_nodeNames.length) {
			p_nodeNames.forEach(nodeName => {
				const p_node = nodeNameObj[nodeName]
				// 父级node 设置为 已执行
				// if (!p_node.local_status) {
				if (p_node) {
					// 如果是条件节点
					if (p_node.conditionNodes && Array.isArray(p_node.conditionNodes)) {
						const idx = p_node.conditionNodes.findIndex(v => v.childNode?.nodeName === curNode.nodeName)
						p_node.conditionNodes.forEach((v, i) => {
							if (i === idx) {
								v.local_status = 'success'
							} else {
								v.local_status = 'info'
							}
						})
					} else {
						// 普通节点
						p_node.local_status = 'success'
					}
				}
			})
		}
	} /*else {
		// 若没有标红 节点 根据 标绿节点处理额外节点样式
		// 处理条件节点
		// 处理结束节点
	}*/

	// 给没有标记 local_status 的 默认填充 未处理
	Object.keys(nodeNameObj).forEach(nodeName => {
		const node = nodeNameObj[nodeName]
		if (!node.local_status) {
			node.local_status = 'info'
		}
	})
}
