import type {
	DeliveryAbnormalReportType,
	DeliveryDashboardType,
	DeliveryExceptionPayloadType,
	DeliveryInfoType,
	DeliveryLocationType,
	DeliveryOnlineStatus,
	DeliveryOrderStatus,
	DeliveryOrderType,
	DeliveryRecordType,
	DeliveryServiceItemType,
	DeliveryServiceRecordType,
	DeliveryStatusLogType,
	DeliveryTimelineItemType
} from '@/types/delivery.uts'

const PROFILE_KEY = 'delivery_care_profile'
const ORDER_KEY = 'delivery_care_orders'

function nowText(): string {
	return new Date().toISOString().replace('T', ' ').substring(0, 19)
}

function cloneProfile(profile: DeliveryInfoType): DeliveryInfoType {
	return JSON.parse(JSON.stringify(profile)) as DeliveryInfoType
}

function cloneOrder(order: DeliveryOrderType): DeliveryOrderType {
	return JSON.parse(JSON.stringify(order)) as DeliveryOrderType
}

function cloneOrders(orders: Array<DeliveryOrderType>): Array<DeliveryOrderType> {
	return JSON.parse(JSON.stringify(orders)) as Array<DeliveryOrderType>
}

function createStatusText(status: DeliveryOrderStatus): string {
	if (status == 'pending_assignment' || status == 'pending_accept') return '待接单'
	if (status == 'accepted') return '已接单'
	if (status == 'waiting_departure') return '待出发'
	if (status == 'departed' || status == 'on_the_way') return '已出发'
	if (status == 'arrived') return '已到达'
	if (status == 'checked_in') return '已签到'
	if (status == 'in_service' || status == 'serving') return '服务中'
	if (status == 'pending_confirm' || status == 'pending_acceptance' || status == 'pending_submit') return '待确认'
	if (status == 'completed') return '已完成'
	if (status == 'rejected') return '已拒单'
	if (status == 'cancelled') return '已取消'
	if (status == 'abnormal' || status == 'exception_pending') return '异常上报'
	if (status == 'terminated') return '服务终止'
	return '已归档'
}

function createStatusTone(status: DeliveryOrderStatus): string {
	if (status == 'pending_assignment' || status == 'pending_accept' || status == 'pending_confirm' || status == 'pending_acceptance' || status == 'pending_submit') return 'warning'
	if (status == 'completed') return 'success'
	if (status == 'rejected' || status == 'cancelled' || status == 'terminated') return 'neutral'
	if (status == 'abnormal' || status == 'exception_pending') return 'danger'
	return 'primary'
}

function createStatusLog(orderId: string, fromStatus: DeliveryOrderStatus, toStatus: DeliveryOrderStatus, remark: string): DeliveryStatusLogType {
	return {
		id: orderId + '-log-' + nowText().replace(/[-: ]/g, ''),
		orderId,
		fromStatus,
		toStatus,
		operatorRole: 'service_staff',
		operatorId: 'mock-staff-001',
		remark,
		createdAt: nowText()
	} as DeliveryStatusLogType
}

function createTimeline(title: string, description: string): DeliveryTimelineItemType {
	return {
		id: 'timeline-' + nowText().replace(/[-: ]/g, ''),
		title,
		time: nowText(),
		description
	} as DeliveryTimelineItemType
}

function createServiceItems(orderId: string): Array<DeliveryServiceItemType> {
	return [
		{
			id: orderId + '-item-1',
			name: '生命体征监测',
			required: true,
			completed: false,
			incompleteReason: '',
			remark: '',
			updatedAt: ''
		} as DeliveryServiceItemType,
		{
			id: orderId + '-item-2',
			name: '基础照护服务',
			required: true,
			completed: false,
			incompleteReason: '',
			remark: '',
			updatedAt: ''
		} as DeliveryServiceItemType,
		{
			id: orderId + '-item-3',
			name: '家属沟通与宣教',
			required: false,
			completed: false,
			incompleteReason: '',
			remark: '',
			updatedAt: ''
		} as DeliveryServiceItemType
	]
}

function createProfile(): DeliveryInfoType {
	return {
		id: 'mock-staff-001',
		userId: 'mock-delivery-user-001',
		staffNo: 'CARE-202605-001',
		name: '陈护理',
		phone: '13600001111',
		role: 'care_worker',
		status: 'active',
		organizationId: 'org-care-001',
		organizationName: '梅江区居家康护中心',
		certificates: [] as Array<any>,
		certificateStatus: 'valid',
		certificateExpireAt: '2027-12-31',
		onlineStatus: 'online',
		serviceArea: '梅江区 / 梅县区',
		skills: ['上门助浴', '康复陪护', '慢病随访', '居家照护'],
		avatarUrl: '',
		todayAccepted: 2,
		todayServing: 1,
		todayCompleted: 1,
		usesMock: true
	} as DeliveryInfoType
}

function createOrder(
	orderId: string,
	serviceName: string,
	serviceType: string,
	status: DeliveryOrderStatus,
	appointmentTime: string,
	duration: number,
	price: number,
	staffIncome: number,
	elderName: string,
	elderGender: string,
	elderAge: number,
	elderPhone: string,
	contactName: string,
	contactPhone: string,
	contactRelation: string,
	address: string,
	addressDetail: string,
	distance: string,
	riskTags: Array<string>,
	healthTags: Array<string>,
	needFamilyPresent: boolean,
	needMaterials: boolean,
	remark: string
): DeliveryOrderType {
	const statusText = createStatusText(status)
	const items = createServiceItems(orderId)
	return {
		id: orderId,
		orderNo: 'CARE-' + orderId.toUpperCase(),
		serviceType,
		serviceName,
		serviceCategory: serviceType,
		serviceItems: items,
		serviceContentOptions: ['基础护理', '生命体征监测', '安全巡视', '家属沟通'],
		elderId: 'elder-' + orderId,
		elderName,
		elderNameMasked: elderName.substring(0, 1) + '**',
		elderGender,
		elderAge,
		elderPhone,
		elderPhoneMasked: elderPhone.substring(0, 3) + '****' + elderPhone.substring(elderPhone.length - 4),
		fullElderName: elderName,
		fullPhone: elderPhone,
		contactName,
		contactPhone,
		contactRelation,
		addressSummary: address,
		address,
		addressDetail,
		fullAddress: address + ' ' + addressDetail,
		latitude: 24.2898,
		longitude: 116.1179,
		appointmentTime,
		appointmentStartTime: appointmentTime,
		appointmentEndTime: appointmentTime,
		duration,
		estimatedDuration: duration,
		price,
		staffIncome,
		distance,
		actualStartTime: '',
		actualEndTime: '',
		status,
		statusText,
		statusTone: createStatusTone(status),
		riskTags,
		healthTags,
		careLevel: '护理二级',
		needFamilyPresent,
		needMaterials,
		remark,
		merchantId: 'merchant-care-001',
		merchantName: '梅江区居家康护中心',
		deliveryStaffId: 'mock-staff-001',
		deliveryStaffName: '陈护理',
		acceptTime: '',
		rejectTime: '',
		departTime: '',
		arriveTime: '',
		checkinTime: '',
		startServiceTime: '',
		finishTime: '',
		cancelReason: '',
		exceptionType: '',
		exceptionDesc: '',
		evidenceList: [] as Array<any>,
		signatureUrl: '',
		signatureName: '',
		satisfactionStatus: '待确认',
		settlementStatus: '待结算',
		archiveStatus: '未归档',
		createdAt: nowText(),
		updatedAt: nowText(),
		notices: ['请提前 15 分钟电话联系', '如遇突发异常先上报再处置'],
		timeline: [createTimeline('订单已生成', '平台已生成上门服务订单')],
		statusLog: [createStatusLog(orderId, status, status, '初始化 mock 订单')],
		serviceSummary: '',
		progressNote: '',
		distanceKm: distance,
		allowCheckinRadiusMeters: 120,
		lastLocation: null,
		trackPoints: [] as Array<DeliveryLocationType>,
		serviceRecord: null,
		abnormalReport: null
	} as DeliveryOrderType
}

function createDefaultOrders(): Array<DeliveryOrderType> {
	const orders = [
		createOrder('mock-care-001', '上门助浴', '生活照护', 'pending_assignment', '2026-05-20 09:00', 90, 199, 128, '李秀珍', '女', 79, '13800131024', '李晓兰', '13900139000', '女儿', '梅江区江南路 18 号', '2 栋 602 室', '2.4km', ['高龄', '行动不便'], ['高血压'], true, true, '请准备防滑垫和浴后保暖衣物'),
		createOrder('mock-care-002', '康复陪护', '康复护理', 'pending_assignment', '2026-05-20 10:30', 120, 260, 160, '张志坤', '男', 83, '13700132233', '张春梅', '13600136666', '女儿', '梅县区新城锦绣花园 5 栋', '1403 室', '5.8km', ['需家属在场'], ['术后恢复'], true, true, '需携带弹力带与康复手册'),
		createOrder('mock-care-003', '陪诊服务', '陪诊陪护', 'accepted', '2026-05-20 13:00', 180, 320, 220, '黄玉英', '女', 76, '13500135566', '黄晓娟', '13500130088', '女儿', '梅江区学海路康养公寓 A 座', '907 室', '1.1km', ['高龄'], ['糖尿病'], false, false, '就诊前需先核对病历资料'),
		createOrder('mock-care-004', '慢病随访', '健康管理', 'departed', '2026-05-20 14:30', 60, 168, 108, '陈国辉', '男', 81, '13900133301', '陈丽芳', '13800136660', '妻子', '梅县区扶老社区 11 栋', '203 室', '3.6km', ['行动不便'], ['高血压', '冠心病'], false, true, '重点测量血压并复核药盒'),
		createOrder('mock-care-005', '居家照护', '长期照护', 'in_service', '2026-05-20 15:00', 120, 288, 190, '王月兰', '女', 87, '13400137744', '王秀玲', '13600139922', '女儿', '梅江区东汇城旁康颐楼 3 单元', '1204 室', '4.2km', ['失能', '需家属在场'], ['血糖异常'], true, true, '服务中注意翻身护理与进食观察'),
		createOrder('mock-care-006', '上门护理', '护理服务', 'completed', '2026-05-19 16:00', 90, 230, 150, '刘建华', '男', 72, '13300136655', '刘敏', '13300998877', '儿子', '梅江区和顺苑 9 栋', '401 室', '6.0km', ['术后恢复'], ['低蛋白'], false, false, '完成换药与术后宣教')
	]
	orders[2].acceptTime = '2026-05-20 11:40:00'
	orders[2].timeline.unshift(createTimeline('已接单', '服务人员已确认接单'))
	orders[2].statusLog.unshift(createStatusLog(orders[2].id, 'pending_assignment', 'accepted', '手动接单'))
	orders[3].acceptTime = '2026-05-20 12:00:00'
	orders[3].departTime = '2026-05-20 13:58:00'
	orders[3].timeline.unshift(createTimeline('已出发', '服务人员已从机构出发'))
	orders[3].statusLog.unshift(createStatusLog(orders[3].id, 'accepted', 'departed', '已出发'))
	orders[4].acceptTime = '2026-05-20 13:00:00'
	orders[4].departTime = '2026-05-20 14:00:00'
	orders[4].arriveTime = '2026-05-20 14:40:00'
	orders[4].checkinTime = '2026-05-20 14:45:00'
	orders[4].startServiceTime = '2026-05-20 14:50:00'
	orders[4].actualStartTime = '2026-05-20 14:50:00'
	orders[4].serviceItems[0].completed = true
	orders[4].serviceItems[0].remark = '血压 132/82，心率 76 次/分'
	orders[4].serviceItems[0].updatedAt = '2026-05-20 15:10:00'
	orders[4].timeline.unshift(createTimeline('开始服务', '已进入服务执行阶段'))
	orders[4].statusLog.unshift(createStatusLog(orders[4].id, 'checked_in', 'in_service', '开始服务'))
	orders[5].acceptTime = '2026-05-19 14:30:00'
	orders[5].departTime = '2026-05-19 15:10:00'
	orders[5].arriveTime = '2026-05-19 15:48:00'
	orders[5].checkinTime = '2026-05-19 15:52:00'
	orders[5].startServiceTime = '2026-05-19 15:55:00'
	orders[5].finishTime = '2026-05-19 17:18:00'
	orders[5].actualStartTime = '2026-05-19 15:55:00'
	orders[5].actualEndTime = '2026-05-19 17:18:00'
	orders[5].serviceSummary = '已完成换药、伤口巡视和家属宣教。'
	orders[5].serviceRecord = {
		id: 'record-' + orders[5].id,
		orderId: orders[5].id,
		startTime: '2026-05-19 15:55:00',
		endTime: '2026-05-19 17:18:00',
		actualDurationMinutes: 83,
		serviceItems: orders[5].serviceItems,
		serviceContent: ['换药护理', '伤口观察', '家属宣教'],
		processNote: '服务过程平稳，老人配合良好。',
		elderStatus: '精神状态稳定，伤口恢复良好。',
		healthMetrics: {
			bloodPressure: '126/80',
			heartRate: '74',
			bloodSugar: '',
			bloodOxygen: '98'
		},
		materialsUsed: '无菌敷料 2 片，棉签 4 支',
		abnormalNote: '',
		photos: ['mock-photo-1'],
		staffRemark: '建议继续保持每日换药。',
		familyConfirmation: {
			method: 'sms_code',
			code: '652318',
			signatureName: '刘敏',
			signatureUrl: '',
			confirmedAt: '2026-05-19 17:20:00'
		},
		createdAt: '2026-05-19 17:18:00',
		updatedAt: '2026-05-19 17:18:00'
	} as DeliveryServiceRecordType
	return orders
}

function readProfileStore(): DeliveryInfoType {
	const cached = uni.getStorageSync(PROFILE_KEY) as DeliveryInfoType | null
	if (cached != null && cached.id != null && cached.id != '') {
		return cloneProfile(cached)
	}
	const created = createProfile()
	uni.setStorageSync(PROFILE_KEY, cloneProfile(created))
	return created
}

function writeProfileStore(profile: DeliveryInfoType): DeliveryInfoType {
	uni.setStorageSync(PROFILE_KEY, cloneProfile(profile))
	return profile
}

function readOrderStore(): Array<DeliveryOrderType> {
	const cached = uni.getStorageSync(ORDER_KEY) as Array<DeliveryOrderType> | null
	if (cached != null && cached.length > 0) {
		return cloneOrders(cached)
	}
	const created = createDefaultOrders()
	uni.setStorageSync(ORDER_KEY, cloneOrders(created))
	return created
}

function writeOrderStore(orders: Array<DeliveryOrderType>): Array<DeliveryOrderType> {
	uni.setStorageSync(ORDER_KEY, cloneOrders(orders))
	return orders
}

function sortOrdersByAppointment(orders: Array<DeliveryOrderType>): Array<DeliveryOrderType> {
	return orders.sort((left, right) => left.appointmentTime.localeCompare(right.appointmentTime))
}

function isPendingStatus(status: DeliveryOrderStatus): boolean {
	return status == 'pending_assignment' || status == 'pending_accept'
}

function isHistoryStatus(status: DeliveryOrderStatus): boolean {
	return status == 'completed' || status == 'rejected' || status == 'cancelled' || status == 'abnormal' || status == 'terminated' || status == 'archived'
}

function isTodayStatus(status: DeliveryOrderStatus): boolean {
	return !isPendingStatus(status) && !isHistoryStatus(status)
}

function refreshOrderMeta(order: DeliveryOrderType): void {
	order.statusText = createStatusText(order.status)
	order.statusTone = createStatusTone(order.status)
	order.updatedAt = nowText()
	order.distanceKm = order.distance
	order.fullAddress = order.address + ' ' + order.addressDetail
	order.fullElderName = order.elderName
	order.fullPhone = order.elderPhone
	order.elderNameMasked = order.elderName.substring(0, 1) + '**'
	order.elderPhoneMasked = order.elderPhone.substring(0, 3) + '****' + order.elderPhone.substring(order.elderPhone.length - 4)
	order.timeline.unshift(createTimeline(order.statusText, '订单状态已更新为' + order.statusText))
}

function findOrderIndex(orders: Array<DeliveryOrderType>, orderId: string): number {
	for (let i = 0; i < orders.length; i++) {
		if (orders[i].id == orderId) {
			return i
		}
	}
	return -1
}

export function getDeliveryCareProfile(): DeliveryInfoType {
	return readProfileStore()
}

export function updateDeliveryCareOnlineStatus(status: DeliveryOnlineStatus): DeliveryInfoType {
	const profile = readProfileStore()
	profile.onlineStatus = status
	return cloneProfile(writeProfileStore(profile))
}

export function getDeliveryCareDashboard(): DeliveryDashboardType {
	const profile = readProfileStore()
	const orders = sortOrdersByAppointment(readOrderStore())
	let pendingCount = 0
	let todayCount = 0
	let pendingDepartCount = 0
	let servingCount = 0
	let completedCount = 0
	let exceptionCount = 0
	let expectedIncome = 0
	let nextOrder: DeliveryOrderType | null = null
	const recentOrders: Array<DeliveryOrderType> = []
	for (let i = 0; i < orders.length; i++) {
		const item = orders[i]
		if (isPendingStatus(item.status)) {
			pendingCount += 1
		}
		if (isTodayStatus(item.status) || item.status == 'completed') {
			todayCount += 1
		}
		if (item.status == 'accepted' || item.status == 'waiting_departure') {
			pendingDepartCount += 1
		}
		if (item.status == 'in_service' || item.status == 'serving') {
			servingCount += 1
		}
		if (item.status == 'completed') {
			completedCount += 1
		}
		if (item.status == 'abnormal' || item.status == 'exception_pending') {
			exceptionCount += 1
		}
		if (!isHistoryStatus(item.status) && item.status != 'rejected' && item.status != 'cancelled') {
			expectedIncome += item.staffIncome
		}
		if (nextOrder == null && !isHistoryStatus(item.status)) {
			nextOrder = cloneOrder(item)
		}
		if (recentOrders.length < 4) {
			recentOrders.push(cloneOrder(item))
		}
	}
	profile.todayAccepted = pendingDepartCount
	profile.todayServing = servingCount
	profile.todayCompleted = completedCount
	writeProfileStore(profile)
	return {
		pendingAssignmentCount: pendingCount,
		pendingAcceptCount: pendingCount,
		todayOrderCount: todayCount,
		pendingDepartCount,
		servingCount,
		completedCount,
		exceptionCount,
		expectedIncome,
		onlineStatus: profile.onlineStatus,
		nextOrder,
		recentOrders
	} as DeliveryDashboardType
}

export function getPendingCareOrders(): Array<DeliveryOrderType> {
	const orders = sortOrdersByAppointment(readOrderStore())
	const result: Array<DeliveryOrderType> = []
	for (let i = 0; i < orders.length; i++) {
		if (isPendingStatus(orders[i].status)) {
			result.push(cloneOrder(orders[i]))
		}
	}
	return result
}

export function getTodayCareOrders(): Array<DeliveryOrderType> {
	const orders = sortOrdersByAppointment(readOrderStore())
	const result: Array<DeliveryOrderType> = []
	for (let i = 0; i < orders.length; i++) {
		if (isTodayStatus(orders[i].status)) {
			result.push(cloneOrder(orders[i]))
		}
	}
	return result
}

export function getHistoryCareOrders(): Array<DeliveryOrderType> {
	const orders = sortOrdersByAppointment(readOrderStore())
	const result: Array<DeliveryOrderType> = []
	for (let i = 0; i < orders.length; i++) {
		if (isHistoryStatus(orders[i].status)) {
			result.push(cloneOrder(orders[i]))
		}
	}
	return result
}

export function getCareOrderDetail(orderId: string): DeliveryOrderType | null {
	const orders = readOrderStore()
	const index = findOrderIndex(orders, orderId)
	if (index < 0) {
		return null
	}
	return cloneOrder(orders[index])
}

export function updateCareOrderStatus(orderId: string, nextStatus: DeliveryOrderStatus, remark: string): DeliveryOrderType | null {
	const orders = readOrderStore()
	const index = findOrderIndex(orders, orderId)
	if (index < 0) {
		return null
	}
	const target = orders[index]
	const fromStatus = target.status
	target.status = nextStatus
	if (nextStatus == 'accepted') {
		target.acceptTime = nowText()
	}
	if (nextStatus == 'rejected') {
		target.rejectTime = nowText()
	}
	if (nextStatus == 'departed') {
		target.departTime = nowText()
	}
	if (nextStatus == 'arrived') {
		target.arriveTime = nowText()
	}
	if (nextStatus == 'checked_in') {
		target.checkinTime = nowText()
	}
	if (nextStatus == 'in_service') {
		target.startServiceTime = nowText()
		target.actualStartTime = target.startServiceTime != null ? target.startServiceTime : nowText()
	}
	if (nextStatus == 'completed') {
		target.finishTime = nowText()
		target.actualEndTime = target.finishTime
	}
	target.statusLog.unshift(createStatusLog(orderId, fromStatus, nextStatus, remark))
	refreshOrderMeta(target)
	writeOrderStore(orders)
	return cloneOrder(target)
}

export function acceptCareOrder(orderId: string): DeliveryOrderType | null {
	return updateCareOrderStatus(orderId, 'accepted', '接单成功')
}

export function rejectCareOrder(orderId: string, reason: string): DeliveryOrderType | null {
	const order = updateCareOrderStatus(orderId, 'rejected', reason)
	if (order != null) {
		const orders = readOrderStore()
		const index = findOrderIndex(orders, orderId)
		if (index >= 0) {
			orders[index].cancelReason = reason
			writeOrderStore(orders)
			return cloneOrder(orders[index])
		}
	}
	return order
}

export function markCareOrderDeparted(orderId: string): DeliveryOrderType | null {
	return updateCareOrderStatus(orderId, 'departed', '服务人员已出发')
}

export function markCareOrderArrived(orderId: string): DeliveryOrderType | null {
	return updateCareOrderStatus(orderId, 'arrived', '服务人员已到达')
}

export function checkInCareOrder(orderId: string, location: DeliveryLocationType | null, note: string): DeliveryOrderType | null {
	const order = updateCareOrderStatus(orderId, 'checked_in', note != '' ? note : '到达签到')
	if (order == null) {
		return null
	}
	const orders = readOrderStore()
	const index = findOrderIndex(orders, orderId)
	if (index >= 0) {
		orders[index].lastLocation = location
		writeOrderStore(orders)
		return cloneOrder(orders[index])
	}
	return order
}

export function startCareService(orderId: string): DeliveryOrderType | null {
	return updateCareOrderStatus(orderId, 'in_service', '开始服务')
}

export function submitCareServiceRecord(orderId: string, record: DeliveryServiceRecordType): DeliveryOrderType | null {
	const orders = readOrderStore()
	const index = findOrderIndex(orders, orderId)
	if (index < 0) {
		return null
	}
	orders[index].serviceRecord = cloneOrder({
		...orders[index],
		serviceRecord: record
	} as DeliveryOrderType).serviceRecord
	orders[index].serviceSummary = record.processNote
	orders[index].progressNote = record.staffRemark
	orders[index].serviceItems = record.serviceItems
	orders[index].status = 'pending_confirm'
	orders[index].statusLog.unshift(createStatusLog(orderId, 'in_service', 'pending_confirm', '已提交服务记录'))
	refreshOrderMeta(orders[index])
	writeOrderStore(orders)
	return cloneOrder(orders[index])
}

export function completeCareOrder(orderId: string): DeliveryOrderType | null {
	const orders = readOrderStore()
	const index = findOrderIndex(orders, orderId)
	if (index < 0) {
		return null
	}
	if (orders[index].serviceRecord == null) {
		return null
	}
	orders[index].statusLog.unshift(createStatusLog(orderId, orders[index].status, 'completed', '完成服务'))
	orders[index].status = 'completed'
	orders[index].finishTime = nowText()
	orders[index].actualEndTime = orders[index].finishTime
	refreshOrderMeta(orders[index])
	writeOrderStore(orders)
	return cloneOrder(orders[index])
}

export function submitCareAbnormalReport(orderId: string, payload: DeliveryExceptionPayloadType): DeliveryOrderType | null {
	const orders = readOrderStore()
	const index = findOrderIndex(orders, orderId)
	if (index < 0) {
		return null
	}
	orders[index].abnormalReport = {
		id: 'abnormal-' + orderId,
		orderId,
		type: payload.exceptionType,
		description: payload.description,
		occurredAt: payload.occurredAt != null ? payload.occurredAt : nowText(),
		locationText: payload.locationText != null ? payload.locationText : '当前位置 mock',
		images: payload.images,
		needPlatformIntervention: payload.needPlatformIntervention === true,
		requestCancelOrder: payload.requestCancelOrder === true,
		requestReschedule: payload.requestReschedule === true,
		createdAt: nowText()
	} as DeliveryAbnormalReportType
	orders[index].exceptionType = payload.exceptionType
	orders[index].exceptionDesc = payload.description
	orders[index].statusLog.unshift(createStatusLog(orderId, orders[index].status, 'abnormal', '提交异常上报'))
	orders[index].status = 'abnormal'
	refreshOrderMeta(orders[index])
	writeOrderStore(orders)
	return cloneOrder(orders[index])
}

export function getCareRecords(): Array<DeliveryRecordType> {
	const orders = readOrderStore()
	const result: Array<DeliveryRecordType> = []
	for (let i = 0; i < orders.length; i++) {
		const item = orders[i]
		if (item.serviceRecord != null || item.status == 'completed') {
			result.push({
				id: 'record-list-' + item.id,
				orderId: item.id,
				orderNo: item.orderNo,
				serviceName: item.serviceName,
				elderName: item.elderName,
				elderNameMasked: item.elderNameMasked,
				status: item.status,
				statusText: item.statusText,
				appointmentStartTime: item.appointmentStartTime,
				appointmentTime: item.appointmentTime,
				actualStartTime: item.actualStartTime,
				actualEndTime: item.actualEndTime,
				staffIncome: item.staffIncome,
				settlementStatus: item.settlementStatus,
				acceptanceStatus: item.satisfactionStatus,
				exceptionDesc: item.exceptionDesc,
				ratingText: item.satisfactionStatus,
				hasServiceRecord: item.serviceRecord != null
			} as DeliveryRecordType)
		}
	}
	return result
}

export function resetCareOrderStore(): void {
	uni.removeStorageSync(ORDER_KEY)
	uni.removeStorageSync(PROFILE_KEY)
}