<template>
    <view class="detail-page">
        <scroll-view class="detail-content" :scroll-y="true">
            <!-- 工单信息 -->
            <view class="info-section">
                <view class="section-title">
                    <text class="section-title-text">工单信息</text>
                </view>
                <view class="info-card">
                    <view class="info-item">
                        <text class="info-label">工单编码</text>
                        <text class="info-value">{{ detailData.workOrderProjectNo ?? '' }}</text>
                    </view>
                    <view class="info-item">
                        <text class="info-label">工单类型</text>
                        <text class="info-value">{{ detailData.orderType == 1 ? '维修工单' : '维保工单' }}</text>
                    </view>
                    <view class="info-item">
                        <text class="info-label">风机编号</text>
                        <text class="info-value">{{ detailData.pcsDeviceName ?? '' }}</text>
                    </view>
					<view class="info-item">
					    <text class="info-label">维保中心</text>
					    <text class="info-value">{{ detailData.gxtCenter ?? '' }}</text>
					</view>
                    <view class="info-item">
                        <text class="info-label">场站</text>
                        <text class="info-value">{{ detailData.pcsStationName ?? '' }}</text>
                    </view>
					<!-- <view class="info-item">
					    <text class="info-label">品牌</text>
					    <text class="info-value">{{ detailData.model ?? '' }}</text>
					</view> -->
                    <view class="info-item">
                        <text class="info-label">机型</text>
                        <text class="info-value">{{ detailData.brand ?? '' }} {{ detailData.model ?? '' }}</text>
                    </view>
					<view class="info-item">
					    <text class="info-label">接单时间</text>
					    <text class="info-value">{{ detailData.acceptTime ?? '' }}</text>
					</view>

                </view>
            </view>
			<!-- <view class="info-section">
				<view class="section-title">
					<text class="section-title-text">工作负责人</text>
				</view>
				<view class="info-card">
					<view class="info-item">
						<input class="input" type="text" placeholder="请输入工作负责人" v-model="teamLeaderName" />
					</view>
				</view>
			</view> -->
			<!-- 工作负责人选择 -->
			<view class="info-section">
			    <view class="section-title">
			        <text class="section-title-text">挂起原因</text>
			    </view>
			    <view class="info-card">
			        <view class="form-item">
			            <text class="form-label required">挂起原因</text>
			            <view class="form-picker" @click="showReasonPicker = true">
			                <view class="picker-display">
			                    <text v-if="suspendReason" class="selected-value">{{ suspendReason }}</text>
			                    <text v-else class="placeholder">请选择挂起原因</text>
			                    <text class="arrow">▼</text>
			                </view>
			            </view>
			        </view>
			    </view>
			</view>

			<!-- 自定义选择器弹窗 -->
			<view v-if="showReasonPicker" class="picker-modal">
			    <view class="modal-mask" @click="showReasonPicker = false"></view>
			    <view class="modal-content">
			        <view class="modal-header">
			            <text class="modal-title">挂起原因</text>
			            <text class="modal-close" @click="showReasonPicker = false">取消</text>
			        </view>
			        <scroll-view class="modal-body" scroll-y="true">
			            <view
			                v-for="(option, index) in suspendReasonOptions"
			                :key="index"
			                class="picker-option"
			                :class="{ 'selected': index === selectedReasonIndex }"
			                @click="selectLeaderManually(index)"
			            >
			                <text class="option-text">{{ option.label }}</text>
			                <text v-if="index === selectedReasonIndex" class="option-check">✓</text>
			            </view>
			        </scroll-view>
			    </view>
			</view>

            <!-- 工单流转 -->
            <!-- <view class="info-section">
                <view class="section-title">
                    <text class="section-title-text">工单流转</text>
                </view>
                <view class="info-card" v-if="detailData.workOrderFlowList != null && detailData.workOrderFlowList.length > 0">
                    <view class="flow-item" v-for="(flow, index) in detailData.workOrderFlowList" :key="index">
                        <view class="flow-header">
                            <text class="flow-operator">{{ flow.operatorName ?? '未知操作人' }}</text>
                            <text class="flow-time">{{ flow.actionTime ?? '' }}</text>
                        </view>
                        <view class="flow-content">
                            <text class="flow-action">{{ getActionTypeName(flow.actionType) }}</text>
                            <text class="flow-remark" v-if="flow.actionRemark">{{ flow.actionRemark }}</text>
                        </view>
                    </view>
                </view>
                <view class="info-card" v-else>
                    <view class="no-data">暂无流转记录</view>
                </view>
            </view> -->
        </scroll-view>

        <!-- 接单按钮 -->
        <view class="accept-button-container">
            <button class="accept-button" @click="handleSuspendOrder">挂 起</button>
        </view>

        <!-- 加载中状态 -->
        <view v-if="loading" class="loading-mask">
            <text class="loading-text">加载中...</text>
        </view>
    </view>
</template>

<script setup lang="uts">
    import { ref } from 'vue'
    import type { acceptOrderInfo } from '../../../types/order'
    import type { WorkOrderFlow } from '../../../types/flow'
    import { getOrderInfoById, getRepairOrderInfoById, suspendOrder } from '../../../api/order/detail'
	import type { SysDictData } from '../../../types/dict'
	import { getDictDataByType } from '../../../api/dict/index'
	import { getUserList } from '../../../api/user/list'
	import type { UserInfo } from '../../../types/user'

	const teamLeaderName = ref<string>("")
	const statusDictList = ref<SysDictData[]>([]) // 工单状态字典列表
	// 添加字典加载状态
	const dictLoaded = ref<boolean>(false)

	// 详情数据
	const detailData = ref<acceptOrderInfo>({
		orderType: 0,
		id: 0,
		teamLeaderId: 0,
		acceptUserId: 0,
		teamLeaderName: null,
		acceptUserName: null,
		acceptTime: null,
		assignTime:  null,
		assignUserName: null,
		status: 0,
		workOrderProjectNo: null,
		workOrderStatus: null,
		gxtCenterId: 0,
		gxtCenter: null,
		pcsStationId:  0,
		pcsStationName: null,
		pcsDeviceId: 0,
		pcsDeviceName: null,
		brand: null,
		model: null,
		createTime: null,
		workOrderFlowList: null,
		suspendReason: null,
		rejectionReason: null
	})

	// 选择器选项类型
	type PickerOption = {
	    label: string
	    value: string
	}

	// 选中的挂起原因
	const suspendReason = ref<string>('')
	const selectedReasonIndex = ref<number>(-1)
	const suspendReasonOptions = ref<PickerOption[]>([])
	const showReasonPicker = ref<boolean>(false)

	// 获取负责人列表（使用用户列表接口）
	const dictList = async (): Promise<void> => {
	    try {
	        const result = await getDictDataByType('gxt_order_suspend_reason')
	        const resultObj = result as UTSJSONObject

	        if (resultObj['code'] == 200) {
				const data = resultObj['data'] as any[]
				const options: PickerOption[] = []
	            if (data.length > 0) {
	                for (let i = 0; i < data.length; i++) {
	                    const item = data[i] as UTSJSONObject
	                    let dictItem: SysDictData = {
							dictValue: item['dictValue'] as string | null,
							dictLabel: item['dictLabel'] as string | null,
							dictCode: null,
							dictSort: null,
							dictType: null,
							cssClass: null,
							listClass: null,
							isDefault: null,
							status: null,
							default: null,
							createTime: null,
							remark: null
	                    }
						// 构建选择器选项
						options.push({
							label: dictItem.dictLabel ?? '',
							value: dictItem.dictValue ?? ''
						})
	                }
	            }

				suspendReasonOptions.value = options
	        }
	    } catch (e: any) {
	        console.error('获取挂起原因失败:', e.message)
	    }
	}

	// 手动选择负责人
	const selectLeaderManually = (index: number): void => {
	    selectedReasonIndex.value = index
	    if (index >= 0 && index < suspendReasonOptions.value.length) {
	        const selectedOption = suspendReasonOptions.value[index]
	        suspendReason.value = selectedOption.label
			detailData.value.suspendReason = selectedOption.value
			console.log("=======",detailData.value.suspendReason)
	    }
	    showReasonPicker.value = false
	}

	// 获取工单状态字典列表
	const loadStatusDictList = async (): Promise<void> => {
	    try {
	        const result = await getDictDataByType('gxt_repair_order_flow_action_type')
	        const resultObj = result as UTSJSONObject

	        if (resultObj['code'] == 200) {
	            const data = resultObj['data'] as any[]
	            const dictData: SysDictData[] = []

	            if (data.length > 0) {
	                for (let i = 0; i < data.length; i++) {
	                    const item = data[i] as UTSJSONObject
	                    // 只提取需要的字段
	                    const dictItem: SysDictData = {
							dictValue: item['dictValue'] as string | null,
							dictLabel: item['dictLabel'] as string | null,
							dictCode: null,
							dictSort: null,
							dictType: null,
							cssClass: null,
							listClass: null,
							isDefault: null,
							status: null,
							default: null,
							createTime: null,
							remark: null
						}
	                    dictData.push(dictItem)
	                }
	            }

	            statusDictList.value = dictData
	            dictLoaded.value = true
	        }
	    } catch (e: any) {
	        console.error('获取工单状态字典失败:', e.message)
	        dictLoaded.value = true
	    }
	}

	// 处理接单操作
	const handleSuspendOrder = async (): Promise<void> => {
		if (suspendReason.value == null || suspendReason.value.trim() === '') {
			uni.showToast({
				title: '请选择挂起原因',
				icon: 'none'
			})
			return
		}

		detailData.value.workOrderStatus = 'to_approve'
			try {
				const result = await suspendOrder(detailData.value)
				const resultObj = result as UTSJSONObject
				const code = resultObj['code'] as number
				if (code == 200) {
					uni.showToast({
						title: '挂起成功',
						icon: 'success'
					})

				// 使用事件总线通知列表页面刷新
				uni.$emit('refreshOrderList', {})
				// 接单成功后返回上一页
				setTimeout(() => {
					uni.navigateBack()
				}, 1000)
			}
		} catch (error) {
		  console.error('请求失败:', error);
		}

	}

    const loading = ref<boolean>(false)

	// 获取操作类型名称
	const getActionTypeName = (item: string | null): string | null => {
	    if (item == null) return ''
	    // const orderInfoItem = item as orderInfo
	    const rawStatus = item

	    if (rawStatus==null) return ''

		// 如果字典尚未加载，返回原始值
		if (!dictLoaded.value) {
			return rawStatus
		}

	    // 查找字典中对应的标签
	    const dictItem = statusDictList.value.find(dict => dict.dictValue == rawStatus)
	    return dictItem!=null ? dictItem.dictLabel : rawStatus
	}

    // 加载详情数据
    const loadDetail = async (id: string, orderType?: number): Promise<void> => {
        try {
            loading.value = true

            let result: any;

            // 根据orderType决定调用哪个API
            if (orderType == 1) {
                // 维修工单
                result = await getRepairOrderInfoById(id)
            } else {
                // 维保工单
                result = await getOrderInfoById(id)
            }

            // 提取响应数据
            const resultObj = result as UTSJSONObject
			const code = resultObj['code'] as number
            const data = resultObj['data'] as UTSJSONObject | null

            if (code == 200 && data != null) {
                // 处理工单流转列表
                let workOrderFlowList: WorkOrderFlow[] | null = null
				let flowList: UTSJSONObject[] = []
				if (orderType == 1) {
				    // 维修工单
				    flowList = data['repairOrderFlowList'] as UTSJSONObject[]
				} else {
				    // 维保工单
				    flowList = data['workOrderFlowList'] as UTSJSONObject[]
				}
                if (flowList != null) {
                    workOrderFlowList = []
                    for (let i = 0; i < flowList.length; i++) {
                        const flowItem = flowList[i]
                        const flow: WorkOrderFlow = {
                            id: flowItem['id'] as Number,
                            orderId: flowItem['orderId'] as Number,
                            orderCode: flowItem['orderCode'] as string,
                            actionType: flowItem['actionType'] as string,
                            fromStatus: flowItem['fromStatus'] as string | null,
                            toStatus: flowItem['toStatus'] as string,
                            operatorId: flowItem['operatorId'] as Number | null,
                            operatorName: flowItem['operatorName'] as string | null,
                            actionTime: flowItem['actionTime'] as string,
                            actionRemark: flowItem['actionRemark'] as string | null,
                            createBy: flowItem['createBy'] as string | null,
                            createTime: flowItem['createTime'] as string | null
                        }
                        workOrderFlowList.push(flow)
                    }
                }

                // 转换数据
                const orderDtail: acceptOrderInfo = {
                    orderType: data['orderType'] as Number,
                    id: data['id'] as Number,
  					teamLeaderId: data['teamLeaderId'] != null ? (data['teamLeaderId'] as Number) : 0,
  					acceptUserId: data['acceptUserId'] != null ? (data['acceptUserId'] as Number) : 0,
                    teamLeaderName: data['teamLeaderName'] as string | null,
                    acceptUserName: data['acceptUserName'] as string | null,
                    acceptTime: data['acceptTime'] as string | null,
                    assignTime: data['assignTime'] as string | null,
                    assignUserName: data['assignUserName'] as string | null,
                    status: (data['status']==null)?0:data['status'] as Number,
                    workOrderProjectNo: data['workOrderProjectNo'] as string | null,
                    workOrderStatus: data['workOrderStatus'] as string | null,
                    gxtCenterId: data['gxtCenterId'] as Number | 0,
                    gxtCenter: data['gxtCenter'] as string | null,
                    pcsStationId: data['pcsStationId'] as Number | 0,
                    pcsStationName: data['pcsStationName'] as string | null,
                    pcsDeviceId: data['pcsDeviceId'] as Number | 0,
                    pcsDeviceName: data['pcsDeviceName'] as string | null,
                    brand: data['brand'] as string | null,
                    model: data['model'] as string | null,
                    createTime: data['createTime'] as string | null,
                    workOrderFlowList: workOrderFlowList,
					suspendReason: data['suspendReason'] as string | null,
					rejectionReason: data['rejectionReason'] as string | null
                }
                detailData.value = orderDtail

				// 如果工单数据中已有负责人信息，设置到输入框中
				if (orderDtail.teamLeaderName != null && orderDtail.teamLeaderName.length > 0) {
					teamLeaderName.value = orderDtail.teamLeaderName as string
				}
				dictList()
            } else {
                const msg = resultObj['msg'] as string | null
                uni.showToast({
                    title: msg ?? '加载失败',
                    icon: 'none'
                })
            }

        } catch (e: any) {
            uni.showToast({
                title: e.message ?? '加载失败',
                icon: 'none'
            })
        } finally {
            loading.value = false
        }
    }

    // 页面加载
    onLoad((options: any) => {
        const params = options as UTSJSONObject
        const id = params['id'] as string | null
		const orderTypeParam = params['orderType'] as string | null
        if (id != null && orderTypeParam != null) {
            // 先尝试从参数中获取orderType
            const orderTypeNumber = parseInt(orderTypeParam)
            loadDetail(id, orderTypeNumber)
        }
    })
	// 初始化
	onMounted(() => {
	    loadStatusDictList()
	})
</script>

<style lang="scss">
    .detail-page {
        flex: 1;
        background-color: #e8f0f9;
    }

    .detail-content {
        flex: 1;
        padding: 20rpx 0;
    }

    .info-section {
        margin: 0 30rpx 24rpx;

        .section-title {
            position: relative;
            padding-left: 20rpx;
            margin-bottom: 20rpx;

            &::before {
                // content: '';
                position: absolute;
                left: 0;
                top: 50%;
                transform: translateY(-50%);
                width: 8rpx;
                height: 32rpx;
                background-color: #007aff;
                border-radius: 4rpx;
            }

            &-text {
                font-size: 32rpx;
                font-weight: bold;
                color: #333333;
            }
        }

        .info-card {
            background-color: #ffffff;
            border-radius: 16rpx;
            padding: 30rpx;

            .info-item {
                flex-direction: row;
                padding: 20rpx 0;
                border-bottom: 1rpx solid #f0f0f0;

                &:last-child {
                    border-bottom: none;
                }

                &.full-width {
                    flex-direction: column;

                    .info-label {
                        margin-bottom: 12rpx;
                    }

                    .info-value {
                        line-height: 44rpx;
                    }
                }

                .info-label {
                    width: 240rpx;
                    font-size: 28rpx;
                    color: #666666;
                    white-space: nowrap;
                }

                .info-value {
                    flex: 1;
                    font-size: 28rpx;
                    color: #333333;
                    text-align: right;

                    &.highlight {
                        color: #007aff;
                        font-weight: bold;
                    }

                    &.input {
                        text-align: left;
                        border: 1rpx solid #e0e0e0;
                        border-radius: 8rpx;
                        padding: 10rpx;
                    }
                }
            }

            .flow-item {
                padding: 20rpx 0;
                border-bottom: 1rpx solid #f0f0f0;

                &:last-child {
                    border-bottom: none;
                }

                .flow-header {
                    flex-direction: row;
                    justify-content: space-between;
                    margin-bottom: 10rpx;

                    .flow-operator {
                        font-size: 28rpx;
                        color: #333333;
                        font-weight: bold;
                    }

                    .flow-time {
                        font-size: 24rpx;
                        color: #999999;
                    }
                }

                .flow-content {
                    flex-direction: column;

                    .flow-action {
                        font-size: 26rpx;
                        color: #666666;
                        margin-bottom: 8rpx;
                    }

                    .flow-remark {
                        font-size: 24rpx;
                        color: #999999;
                        background-color: #f5f5f5;
                        padding: 10rpx;
                        border-radius: 8rpx;
                    }
                }
            }

            .no-data {
                text-align: center;
                padding: 40rpx 0;
                font-size: 28rpx;
                color: #999999;
            }
        }
    }

    .accept-button-container {
        padding: 30rpx 30rpx 50rpx;
        background-color: #ffffff;

        .accept-button {
            width: 100%;
            height: 80rpx;
            background-color: #007aff;
            color: #ffffff;
            font-size: 32rpx;
            border-radius: 16rpx;
            border: none;

            &:active {
                background-color: #0062cc;
            }
        }
    }

    .loading-mask {
        position: absolute;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
        justify-content: center;
        align-items: center;
        background-color: rgba(0, 0, 0, 0.3);

        .loading-text {
            padding: 30rpx 60rpx;
            background-color: rgba(0, 0, 0, 0.7);
            color: #ffffff;
            font-size: 28rpx;
            border-radius: 12rpx;
        }
    }
	.picker-modal {
	    position: fixed;
	    top: 0;
	    left: 0;
	    right: 0;
	    bottom: 0;
	    z-index: 1000;
	}

	.modal-mask {
	    position: absolute;
	    top: 0;
	    left: 0;
	    right: 0;
	    bottom: 0;
	    background-color: rgba(0, 0, 0, 0.5);
	}

	.modal-content {
	    position: absolute;
	    bottom: 0;
	    left: 0;
	    right: 0;
	    background-color: #ffffff;
	    border-top-left-radius: 16rpx;
	    border-top-right-radius: 16rpx;
	    max-height: 700rpx;
	}

	.modal-header {
	    flex-direction: row;
	    justify-content: space-between;
	    align-items: center;
	    padding: 30rpx;
	    border-bottom: 1rpx solid #f0f0f0;
	}

	.modal-title {
	    font-size: 32rpx;
	    font-weight: bold;
	    color: #333333;
	}

	.modal-close {
	    font-size: 28rpx;
	    color: #007aff;
	}

	.modal-body {
	    max-height: 600rpx;
	}

	.picker-option {
	    flex-direction: row;
	    justify-content: space-between;
	    align-items: center;
	    padding: 24rpx 30rpx;
	    border-bottom: 1rpx solid #f0f0f0;
	}

	.picker-option.selected {
	    background-color: #f8f9fa;
	}

	.option-text {
	    font-size: 28rpx;
	    color: #333333;
	}

	.option-check {
	    font-size: 28rpx;
	    color: #007aff;
	}

	.form-picker {
	    flex: 1;
	}

	.picker-display {
	    flex-direction: row;
	    justify-content: space-between;
	    align-items: center;
	    min-height: 40rpx;
	}

	.selected-value {
	    font-size: 28rpx;
	    color: #333333;
	}

	.placeholder {
	    font-size: 28rpx;
	    color: #999999;
	}

	.arrow {
	    font-size: 24rpx;
	    color: #999999;
	    margin-left: 12rpx;
	}
</style>

