/**
 * @file statusManager.js
 * @description 全局状态管理（订单状态、退款状态等）
 * * 职责：
 * 1. 集中定义所有状态的 key 与 value。
 * 2. 提供统一的方法根据 key 获取对应的名称、颜色、uView组件类型等。
 * * 如何使用:
 * import statusManager from '@/utils/statusManager.js';
 * * // 获取订单状态名称
 * const statusName = statusManager.getValue('order', 'shipped', 'name'); // "已出餐"
 * * // 获取退款状态的 u-tag 类型
 * const refundType = statusManager.getValue('refund', 'refund_pending', 'type'); // "error"
 * * // (推荐) 获取完整的状态对象
 * const statusObj = statusManager.getStatus('order', 'delivered');
 * // statusObj = { name: '已送达', color: '#19be6b', type: 'success' }
 */

// 默认状态，当查询不到时返回
const DEFAULT_STATUS = { name: '', color: '#909399', type: 'info' };

// 状态定义池
const STATUS_MAPS = {
	// 团餐订单状态
	// 订单状态 0 待支付 1 待成团 2 已成团 3 已出餐 4 已送达 5 已取消 6 售后 7 团餐失败
	gmOrder: {
		0: { name: '待支付', desc: '超时未支付，订单将自动取消', color: '#909399', type: 'info' },
		1: { name: '待成团', desc: '成团后，商家会为您尽快出餐，如拼团失败，平台会为您退还付款金额', color: '#909399', type: 'info' },
		2: { name: '已成团', desc: '参团成功，商家会为您尽快出餐', color: '#f90', type: 'warning' },
		3: { name: '已出餐', desc: '商家出餐成功，我们将尽快送餐，请您耐心等待', color: '#2979ff', type: 'primary' },
		4: { name: '已送达', desc: '餐品已送达收货地，请您尽快享用', color: '#19be6b', type: 'success' },
		5: { name: '已取消', desc: '当前订单已取消，请重新下单', color: '#c0c4cc', type: 'info' },
		6: { name: '售后处理中', desc: '', color: '#fa3534', type: 'error' },
		7: { name: '成团失败', desc: '支付金额将退回原账户，请注意查收', color: '#fa3534', type: 'error' },
	},

	// 售后状态
	// 售后状态 0-待处理 1-同意退款 2-拒绝退款
	audit: {
		0: { name: '售后处理中', desc: '正在等待商家处理，请耐心等待', color: '#f90', type: 'warning' },
		1: { name: '同意退款', desc: '商家同意了您的退款申请', color: '#19be6b', type: 'success' },
		2: { name: '拒绝退款', desc: '商家拒绝了您的退款申请', color: '#fa3534', type: 'error' },
	},

	// 退款状态
	// 退款状态 0-未退款 1-退款成功 2-退款中 3-退款失败 99-挂起
	refund: {
		0: { name: '未退款', desc: '', color: '#f90', type: 'warning' },
		1: { name: '退款成功', desc: '退款金额已退回原账户，请注意查收', color: '#19be6b', type: 'success' },
		2: { name: '极速退款中', desc: '商家已同意退款，1-3个自然日内退回原账户', color: '#fa3534', type: 'error' },
		3: { name: '退款失败', desc: '当前订单金额未退回原账户，请重新申请', color: '#909399', type: 'info' },
	},

	// 购买须知
	// 是否需要预约(0否 1是)
	preBook: {
		0: { name: '免预约', desc: '到店消费：无需预约，高峰期可能需要排队', color: '#f90', type: 'warning' },
		1: { name: '需预约', desc: '到店消费：需电话预约', color: '#19be6b', type: 'success' },
	},
	// 退款标签(1随时退 2过期自动退)
	refundLabel: {
		1: { name: '随时退', color: '#f90', type: 'warning' },
		2: { name: '过期自动退款', color: '#19be6b', type: 'success' },
	},
	// 退款是否商家确认(0否 1是)
	refundConfirm: {
		0: { name: '退款无需商家确认', color: '#f90', type: 'warning' },
		1: { name: '退款需要商家确认', color: '#19be6b', type: 'success' },
	},
};

class StatusManager {
	/**
	 * [推荐] 获取完整的状态对象
	 * @param {string} type - 状态类型 (e.g., 'order', 'refund')
	 * @param {string|number} key - 状态值 (e.g., 'delivered', 'refund_pending')
	 * @returns {object} 包含 {name, color, type} 的对象
	 */
	getStatus(type, key) {
		if (STATUS_MAPS[type] && STATUS_MAPS[type][key]) {
			return STATUS_MAPS[type][key];
		}
		return DEFAULT_STATUS;
	}

	/**
	 * [按需] 获取状态对象中的单个属性值
	 * @param {string} type - 状态类型 (e.g., 'order', 'refund')
	 * @param {string|number} key - 状态值 (e.g., 'delivered')
	 * @param {string} [prop='name'] - 要获取的属性 (e.g., 'name', 'color', 'type')
	 * @returns {string} 属性值
	 */
	getValue(type, key, prop = 'name') {
		const status = this.getStatus(type, key);
		return status[prop] || DEFAULT_STATUS[prop];
	}
}

// 导出 StatusManager 的单例，确保全局唯一
const statusManager = new StatusManager();
export default statusManager;