/** 订单 ID 类型。 */
export type OrderId = string | number;

/** 数值兼容类型。 */
export type NumericLike = number | string;

/** 通用扩展对象。 */
export interface ExtendableRecord {
    /** 扩展字段。 */
    [key: string]: unknown;
}

/** 通用经纬度点位。 */
export interface LocationPoint {
    /** 纬度。 */
    latitude: NumericLike;
    /** 经度。 */
    longitude: NumericLike;
}

/** 通用接口包裹响应。 */
export interface ApiEnvelope<TData = unknown> extends ExtendableRecord {
    /** 业务状态码。 */
    code?: number;
    /** 业务提示文案。 */
    msg?: string;
    /** 业务数据。 */
    data?: TData;
}

/** 路线折线点。 */
export interface RoutePolylinePoint extends ExtendableRecord {
    /** 纬度。 */
    latitude?: NumericLike;
    /** 经度。 */
    longitude?: NumericLike;
}

/** 路线摘要。 */
export interface RouteSummary extends ExtendableRecord {
    /** 路线 ID。 */
    routeID?: OrderId;
    /** 路况指纹。 */
    pathFingerprint?: string;
    /** 折线点集合。 */
    polyline?: RoutePolylinePoint[];
    /** 路线距离。 */
    distance?: NumericLike;
    /** 路线时长。 */
    duration?: NumericLike;
    /** 红绿灯数量。 */
    trafficLights?: NumericLike;
}

/** 路线费用信息。 */
export interface RouteFareEstimate extends ExtendableRecord {
    /** 预估等待时长。 */
    waitingTime?: NumericLike;
    /** 最终金额。 */
    finalFare?: NumericLike;
    /** 原价金额。 */
    originalFare?: NumericLike;
    /** 线路报价返回的优惠券 ID。 */
    couponId?: OrderId | '';
    /** 兼容后端返回的用户优惠券 ID。 */
    userCouponId?: OrderId | '';
}

/** 单条路线选项。 */
export interface RouteOptionItem extends ExtendableRecord {
    /** 路线基础信息。 */
    route?: RouteSummary;
    /** 费用估算。 */
    fareEstimate?: RouteFareEstimate;
    /** 定价卡信息。 */
    xpPricingCard?: unknown;
    /** 快照 ID。 */
    snapshotId?: OrderId;
    /** 路线生成时间戳。 */
    generatedAtMillis?: NumericLike;
    /** 主路线规划策略。 */
    primaryRoutePlanRule?: NumericLike;
    /** 主策略展示文案。 */
    primaryStrategyLabel?: string;
    /** 高德路线策略。 */
    amapStrategy?: NumericLike;
    /** 路线 ID。 */
    routeId?: OrderId;
}

/** 路线与费用查询请求。 */
export interface QueryRouteAndFarePayload {
    /** 起点。 */
    origin: LocationPoint;
    /** 终点。 */
    destination: LocationPoint;
    /** 开通城市 ID。 */
    openCityId: NumericLike;
    /** 起点站点 ID。 */
    startPointId: OrderId | '';
    /** 用户优惠券 ID。 */
    userCouponId?: OrderId | '';
    /** 当前订单 ID。 */
    orderId?: OrderId | '';
}

/** 路线与费用查询对象响应。 */
export interface QueryRouteAndFareObjectResponse extends ExtendableRecord {
    /** 路线选项集合。 */
    routes?: RouteOptionItem[];
    /** 快照 ID。 */
    snapshotId?: OrderId;
    /** 路线生成时间戳。 */
    generatedAtMillis?: NumericLike;
}

/** 路线与费用查询响应。 */
export type QueryRouteAndFareResponse =
    | QueryRouteAndFareObjectResponse
    | RouteOptionItem[]
    | RouteOptionItem;

/** 路线偏好查询请求。 */
export interface QueryRoutePreferencesPayload {
    /** 开通城市 ID。 */
    openCityId: NumericLike;
}

/** 路线偏好项。 */
export interface RoutePreferenceItem extends ExtendableRecord {
    /** 偏好编码。 */
    code?: string;
    /** 偏好名称。 */
    name?: string;
    /** 规划策略值。 */
    amapStrategy?: NumericLike;
    /** 是否已选中。 */
    selected?: boolean;
}

/** 路线偏好查询对象响应。 */
export interface QueryRoutePreferencesObjectResponse extends ExtendableRecord {
    /** 偏好列表。 */
    list?: RoutePreferenceItem[];
    /** 兼容 data 列表。 */
    data?: RoutePreferenceItem[];
}

/** 路线偏好查询响应。 */
export type QueryRoutePreferencesResponse =
    | RoutePreferenceItem[]
    | QueryRoutePreferencesObjectResponse;

/** 路线偏好保存请求。 */
export interface SaveRoutePreferencePayload {
    /** 偏好编码。 */
    code: string;
}

/** 路况过期校验请求。 */
export interface RouteStaleCheckPayload {
    /** 快照 ID。 */
    snapshotId: OrderId;
    /** 路况指纹。 */
    pathFingerprint: string;
    /** 客户端快照时间戳。 */
    clientSnapshotMillis: NumericLike;
    /** 客户端展示的最终价格。 */
    clientFinalFare: NumericLike;
}

/** 路况过期校验响应。 */
export interface RouteStaleCheckResponse extends ExtendableRecord {
    /** 是否需要刷新提示。 */
    needRefreshNotice?: boolean;
}

/** 接驾态切换路线请求。 */
export interface SelectRoutePayload {
    /** 订单 ID。 */
    orderId: OrderId | '';
    /** 导航快照 ID。 */
    snapshotId: OrderId;
    /** 路况指纹。 */
    pathFingerprint: string;
}

/** 保存订单请求。 */
export interface SaveOrderPayload {
    /** 终点站点 ID。 */
    endPointId: OrderId;
    /** 开通城市 ID。 */
    openCityId: NumericLike;
    /** 上车地址文案。 */
    placementAddress: string;
    /** 上车纬度。 */
    placementLat: NumericLike;
    /** 上车经度。 */
    placementLon: NumericLike;
    /** 起点站点 ID。 */
    startPointId: OrderId;
    /** 围栏区域 ID。 */
    xpElectronicFenceAreaId: OrderId | '';
    /** 预估上车时间。 */
    estimatedTime: string;
    /** 选中的路线 ID。 */
    selectedRouteId?: OrderId;
    /** 导航快照 ID。 */
    navigationSnapshotId?: OrderId;
    /** 用户优惠券 ID。 */
    userCouponId?: OrderId | '';
}

/** 保存订单成功响应。 */
export interface SaveOrderSuccessResponse extends ExtendableRecord {
    /** 新订单 ID。 */
    orderId?: string;
}

/** 保存订单提示响应。 */
export interface SaveOrderMessageResponse extends ExtendableRecord {
    /** 新订单 ID。 */
    orderId?: string;
    /** 兼容 data 文案。 */
    data?: string;
    /** 提示文案。 */
    msg?: string;
}

/** 保存订单响应。 */
export type SaveOrderResponse =
    | SaveOrderSuccessResponse
    | SaveOrderMessageResponse
    | string;

/** 等待时间查询请求。 */
export interface GetWaitTimePayload {
    /** 起点纬度。 */
    latitude: NumericLike;
    /** 起点经度。 */
    longitude: NumericLike;
    /** 起点站点 ID。 */
    startPointId: OrderId | '';
}

/** 订单 ID 请求参数。 */
export interface OrderIdPayload {
    /** 订单 ID。 */
    orderId: OrderId;
}

/** 车辆信息查询响应。 */
export interface QueryVehicleByOrderIdResponse extends ExtendableRecord {
    /** 订单 ID。 */
    orderId?: OrderId;
}

/** 设置温度请求。 */
export interface SetTemperaturePayload {
    /** 订单 ID。 */
    orderId: OrderId;
    /** 目标温度。 */
    targetTemperature: NumericLike;
}

/** 设置温度响应。 */
export type SetTemperatureResponse = boolean | ApiEnvelope | null | undefined;

/** 解锁车辆请求。 */
export interface UnlockVehiclePayload {
    /** 订单 ID。 */
    orderId: OrderId;
    /** 操作目标。 */
    doorType: 'door' | 'trunk';
    /** 后备箱期望操作（doorType=trunk 时必传）：open-期望打开 / close-期望关闭。服务端会对比当前后备箱状态，一致则不下发车控指令。 */
    trunkAction?: 'open' | 'close';
    /** 用户经度。 */
    longitude: NumericLike;
    /** 用户纬度。 */
    latitude: NumericLike;
}

/** 车辆解锁响应。 */
export type UnlockVehicleResponse = ApiEnvelope<unknown>;

/** 查询车辆温度响应。 */
export type QueryTemperatureByOrderIdResponse = NumericLike;

/** 查询车辆空调开关响应对象。 */
export interface QueryVehicleAirConditionerSwitchObjectResponse extends ExtendableRecord {
    /** 空调开启状态。 */
    open?: boolean | NumericLike;
    /** 兼容开启状态字段。 */
    isOpen?: boolean | NumericLike;
    /** 兼容开关状态字段。 */
    switchStatus?: boolean | NumericLike;
    /** 兼容空调开关字段。 */
    airConditionerSwitch?: boolean | NumericLike;
}

/** 查询车辆空调开关响应。 */
export type QueryVehicleAirConditionerSwitchResponse =
    | QueryVehicleAirConditionerSwitchObjectResponse
    | boolean
    | NumericLike;

/** 车辆空调开关控制请求。 */
export interface AirConditionerUnlockPayload {
    /** 订单 ID。 */
    orderId: OrderId;
    /** 是否开启空调。 */
    open: boolean;
}

/** 查询后备箱状态内层对象。 */
export interface QueryVehicleTrunkOpenStatusStateMapItem extends ExtendableRecord {
    /** 后备箱状态值。 */
    value?: NumericLike;
}

/** 查询后备箱状态响应对象。 */
export interface QueryVehicleTrunkOpenStatusObjectResponse extends ExtendableRecord {
    /** 兼容直接 data 值。 */
    data?: NumericLike;
    /** 兼容直接 value 值。 */
    value?: NumericLike;
    /** 兼容状态映射。 */
    stateMap?: {
        /** 后备箱状态。 */
        trunkAjarCloseSt?: QueryVehicleTrunkOpenStatusStateMapItem;
    };
}

/** 查询后备箱状态响应。 */
export type QueryVehicleTrunkOpenStatusResponse =
    | QueryVehicleTrunkOpenStatusObjectResponse
    | NumericLike;

/** 结束订单响应。 */
export type EndOrderResponse = boolean | ExtendableRecord | null | undefined;

/** 修改目的地请求。 */
export interface OrderChangePayload {
    /** 新终点站点 ID。 */
    endPointId: OrderId;
    /** 订单 ID。 */
    orderId: OrderId | '';
    /** 选中的路线 ID。 */
    selectedRouteId?: OrderId | '';
    /** 选中的路线规则。 */
    selectedRoutePlanRule?: NumericLike | '';
    /** 导航快照 ID。 */
    navigationSnapshotId?: OrderId | '';
}

/** 费用明细查询请求。 */
export interface QueryFareBreakdownPayload {
    /** 订单 ID。 */
    orderId: string;
    /** 用户优惠券 ID。 */
    userCouponId?: string;
}

/** 费用明细响应。 */
export interface QueryFareBreakdownResponse extends ExtendableRecord {
    /** 当前生效优惠券 ID。 */
    userCouponId?: OrderId;
}

/** 评价提交请求。 */
export interface SubmitOrderCommentPayload {
    /** 评价星级。 */
    orderRating: number;
    /** 反馈类型 ID，多个值使用英文逗号分隔。 */
    feedbackTypeId?: string;
    /** 反馈文案。 */
    feedbackContent?: string;
    /** 反馈图片 JSON。 */
    feedbackPictures?: string;
    /** 订单 ID。 */
    orderId: OrderId;
}

/** 投诉提交请求。 */
export interface SubmitComplaintPayload {
    /** 评价星级。 */
    orderRating?: number;
    /** 反馈类型 ID，多个值使用英文逗号分隔。 */
    feedbackTypeId?: string;
    /** 反馈文案。 */
    feedbackContent?: string;
    /** 反馈图片/视频 URL，多个值使用英文逗号分隔。 */
    feedbackPictures?: string;
    /** 订单 ID。 */
    orderId?: OrderId;
    /** 反馈渠道：1=车内二维码，2=小程序"我的"入口。 */
    feedbackChannel?: number;
    /** 车辆 VIN，渠道 1（车内二维码）时必填。 */
    vin?: string;
}

/** 评价/投诉提交响应。 */
export interface SubmitFeedbackResponse extends ExtendableRecord {
    /** 是否成功。 */
    success?: boolean;
    /** 响应码。 */
    code?: number;
    /** 提示文案。 */
    msg?: string;
}

/** 评价类型项。 */
export interface OrderCommentTypeItem extends ExtendableRecord {
    /** 类型 ID。 */
    id?: number | string;
    /** 类型名称。 */
    feedbackType?: string;
}

/** 支付请求。 */
export interface GetOrderPaymentPayload {
    /** 订单 ID。 */
    orderId: OrderId;
}

/** 订单轨迹查询请求。 */
export interface QueryOrderRoutePayload {
    /** 订单 ID。 */
    orderId: string;
    /** 路线类型。 */
    routeType: number;
}

/** 订单路线摘要。 */
export interface OrderRouteMeta extends ExtendableRecord {
    /** 路线距离。 */
    distance?: NumericLike;
    /** 路线时长。 */
    duration?: NumericLike;
    /** 方向角。 */
    direction?: NumericLike;
}

/** 订单轨迹响应 content。 */
export interface OrderRouteResponseContent extends ExtendableRecord {
    /** 行程状态。 */
    tripStatus?: NumericLike;
    /** 订单状态。 */
    orderStatus?: NumericLike;
    /** 状态值。 */
    status?: NumericLike;
    /** 点位集合。 */
    points?: RoutePolylinePoint[];
    /** 路线摘要。 */
    route?: OrderRouteMeta;
}

/** 订单轨迹响应。 */
export interface QueryOrderRouteResponse extends ExtendableRecord {
    /** 终点经度。 */
    endLongitude?: NumericLike;
    /** 终点纬度。 */
    endlatitude?: NumericLike;
    /** 折线点集合。 */
    polyline?: RoutePolylinePoint[];
    /** 路线距离。 */
    distance?: NumericLike;
    /** 路线时长。 */
    duration?: NumericLike;
    /** 方向角。 */
    direction?: NumericLike;
    /** 行程状态。 */
    tripStatus?: NumericLike;
    /** 订单状态。 */
    orderStatus?: NumericLike;
    /** 当前订单是否已开过车门。 */
    isOpenDoor?: boolean | NumericLike;
    /** content 扩展数据。 */
    content?: OrderRouteResponseContent;
}

/** 排队状态请求。 */
export interface QueryOrderQueueStatusPayload {
    /** 订单 ID。 */
    orderId: OrderId;
}

/** 排队状态数据。 */
export interface OrderQueueStatusData extends ExtendableRecord {
    /** 当前排队位次。 */
    currentPosition?: NumericLike;
    /** 预计等待时长。 */
    estimatedWaitTime?: NumericLike;
    /** 排队状态。 */
    status?: NumericLike;
    /** 总排队人数。 */
    totalCount?: NumericLike;
}

/** 排队状态响应。 */
export type QueryOrderQueueStatusResponse =
    | OrderQueueStatusData
    | ApiEnvelope<OrderQueueStatusData>;

/** 分享订单信息请求。 */
export interface ShareQueryOrderInfoPayload {
    /** 订单 ID。 */
    orderId: OrderId;
}

/** 分享订单信息响应。 */
export interface ShareQueryOrderInfoResponse extends ExtendableRecord {
    /** 订单状态。 */
    status?: NumericLike;
    /** 起点名称。 */
    startPointName?: string;
    /** 终点名称。 */
    endPointName?: string;
    /** 起点纬度。 */
    startLat?: NumericLike;
    /** 起点经度。 */
    startLon?: NumericLike;
    /** 终点纬度。 */
    endLat?: NumericLike;
    /** 终点经度。 */
    endLon?: NumericLike;
    /** 车辆图片。 */
    vehiclePictures?: string;
    /** 兼容车辆图片字段。 */
    vehicleImage?: string;
    /** 上车时间。 */
    boardingTime?: string;
    /** 兼容上车时间字段。 */
    pickupTime?: string;
    /** 下车时间。 */
    getoffTime?: string;
    /** 完成时间。 */
    finishTime?: string;
    /** 订单结束时间。 */
    orderFinishTime?: string;
    /** 客服电话。 */
    customerServicePhone?: string;
    /** 兼容客服电话字段。 */
    servicePhone?: string;
}

/** 分享订单路线响应。 */
export interface ShareQueryOrderRouteResponse extends QueryOrderRouteResponse {
    /** 已服务点集合。 */
    servedPoints?: RoutePolylinePoint[];
    /** 车辆方向。 */
    vehicleDirection?: NumericLike;
    /** 路线对象。 */
    route?: OrderRouteMeta & {
        /** 路线点集合。 */
        polyline?: RoutePolylinePoint[];
    };
    /** 兼容 points 字段。 */
    points?: RoutePolylinePoint[];
}

/** 支付入口状态：1=已签约，2=未签约。 */
export enum RobotaxiPaymentEntryStatus {
    Signed = 1,
    Unsigned = 2
}

/** 已签约态支付方式。 */
export enum RobotaxiSignedPayType {
    WechatCredit = 13
}

/** 订单状态枚举。 */
export enum RobotaxiOrderStatus {
    Cancelled = 0,
    PendingAccept = 1,
    PendingDeparture = 2,
    OnTheWayToPickup = 3,
    WaitingPassengerBoard = 4,
    PassengerBoarded = 5,
    InService = 6,
    WaitingPassengerDropoff = 7,
    PendingPayment = 8,
    PendingComment = 9,
    Completed = 10
}

/** 已签约态返回值。 */
export type SignedOrderPaymentValue = {
    businessOrderId: string;
    authOrderId: string;
    channelOrderId: string;
    payType: RobotaxiSignedPayType | number;
    packageValue: string;
};

/** 未签约态返回值。 */
export type UnsignedOrderPaymentValue = {
    bizOrderId: string;
    prePayId: string;
    url: string;
    token: string;
};

/** 订单支付入口返回值。 */
export type OrderPaymentResponse =
    | { status: RobotaxiPaymentEntryStatus.Signed; value: SignedOrderPaymentValue }
    | { status: RobotaxiPaymentEntryStatus.Unsigned; value: UnsignedOrderPaymentValue };

/** 订单支付结果查询返回值。 */
export type QueryOrderPaymentResultResponse = {
    payStatus: number;
    payType: number;
    payTime: string;
};

// 信用分授权结果查询响应
export type QueryLedgerCreditOrderResultResponse = {
    creditOrderStatus: 'DOING' | 'REVOKED' | 'EXPIRED' | string;
};
