//
//  OrderDetailViewModel.swift
//  suixinkan
//
//  Created by Codex on 2026/6/22.
//

import Foundation
import Observation

@MainActor
@Observable
/// 订单详情 ViewModel，负责加载门店订单详情并保留列表摘要兜底展示。
final class OrderDetailViewModel {
    private(set) var detail: StoreOrderDetailResponse?
    private(set) var loading = false
    private(set) var errorMessage: String?
    private(set) var contextMessage: String?

    /// 当前页面用于展示的订单信息，详情接口成功时优先使用详情数据。
    var display: StoreOrderDetailDisplay {
        if let detail {
            return StoreOrderDetailDisplay(detail: detail)
        }
        return StoreOrderDetailDisplay(item: item)
    }

    /// 详情中的项目配置。
    var projectInfo: StoreOrderProjectInfo? {
        detail?.multiTravel?.projectInfo
    }

    /// 详情中的拍摄点列表。
    var shootingList: [StoreOrderShootingListItem] {
        detail?.multiTravel?.shootingList ?? []
    }

    private let item: OrderEntity

    /// 初始化详情 ViewModel，并注入列表订单作为兜底数据。
    init(item: OrderEntity) {
        self.item = item
    }

    /// 加载门店订单详情，缺少门店 ID 时只保留列表摘要展示。
    func load(api: OrderServing, fallbackStoreId: Int?) async {
        guard detail == nil, !loading else { return }

        guard let storeId = item.storeId ?? fallbackStoreId, storeId > 0 else {
            contextMessage = "缺少门店上下文，当前展示订单摘要。"
            return
        }

        loading = true
        errorMessage = nil
        contextMessage = nil
        defer { loading = false }

        do {
            detail = try await api.storeOrderDetail(storeId: storeId, orderNumber: item.orderNumber)
        } catch {
            errorMessage = error.localizedDescription
            contextMessage = "详情加载失败，当前展示订单摘要。"
        }
    }

    /// 清理当前错误提示。
    func clearError() {
        errorMessage = nil
    }
}
