import request from '../../utils/request';
import { _ROBOTAXI_HOST } from '../../constants/api';
import type {
    AirConditionerUnlockPayload,
    EndOrderResponse,
    GetWaitTimePayload,
    NumericLike,
    OrderChangePayload,
    OrderCommentTypeItem,
    OrderId,
    OrderIdPayload,
    QueryFareBreakdownPayload,
    QueryFareBreakdownResponse,
    QueryOrderQueueStatusPayload,
    QueryOrderQueueStatusResponse,
    QueryOrderRoutePayload,
    QueryOrderRouteResponse,
    QueryRouteAndFarePayload,
    QueryRouteAndFareResponse,
    QueryRoutePreferencesPayload,
    QueryRoutePreferencesResponse,
    QueryTemperatureByOrderIdResponse,
    QueryVehicleAirConditionerSwitchResponse,
    QueryVehicleByOrderIdResponse,
    QueryVehicleTrunkOpenStatusResponse,
    SelectRoutePayload,
    RouteStaleCheckPayload,
    RouteStaleCheckResponse,
    SaveOrderPayload,
    SaveOrderResponse,
    SaveRoutePreferencePayload,
    SetTemperaturePayload,
    SetTemperatureResponse,
    ShareQueryOrderInfoPayload,
    ShareQueryOrderInfoResponse,
    ShareQueryOrderRouteResponse,
    SubmitFeedbackResponse,
    SubmitOrderCommentPayload,
    UnlockVehiclePayload,
    UnlockVehicleResponse,
    OrderPaymentResponse,
    QueryOrderPaymentResultResponse,
    QueryLedgerCreditOrderResultResponse
} from './types/begin-route';
import { withApiLog } from '../utils/api-logger';

// 导航-获取路线和费用
export const queryRouteAndFare = async (payload: QueryRouteAndFarePayload): Promise<QueryRouteAndFareResponse> => {
    return request({
        url: _ROBOTAXI_HOST + '/itinerary/base/v1/mini-program/navigation/multi-route-and-fare',
        method: 'POST',
        payload
    }, true);
}

// 查询用户优惠券状态
export const getAppUserCouponStatus = async (appUserCouponId: string): Promise<boolean> => {
    return request({
        url: _ROBOTAXI_HOST + `/account/api/v1/mini-program/getAppUserCouponStatus/${appUserCouponId}`,
        method: 'GET'
    }, true);
}

// 导航-获取路线偏好配置
export const queryRoutePreferences = async (
    payload: QueryRoutePreferencesPayload
): Promise<QueryRoutePreferencesResponse> => {
    return request({
        url: _ROBOTAXI_HOST + '/itinerary/base/v1/mini-program/navigation/route-preferences',
        method: 'GET',
        payload
    }, true);
}

// 导航-设置路线偏好
export const saveRoutePreference = async (payload: SaveRoutePreferencePayload): Promise<void> => {
    return request({
        url: _ROBOTAXI_HOST + '/itinerary/base/v1/mini-program/navigation/route-preference',
        method: 'POST',
        payload
    }, true);
}

// 导航-下单前校验路况是否过期
export const routeStaleCheck = async (
    payload?: RouteStaleCheckPayload
): Promise<RouteStaleCheckResponse> => {
    return request({
        url: _ROBOTAXI_HOST + '/itinerary/base/v1/mini-program/navigation/route-stale-check',
        method: 'POST',
        payload
    }, true);
}

// 导航-接驾态确认切换路线
export const selectNavigationRoute = async (payload: SelectRoutePayload): Promise<void> => {
    return request({
        url: _ROBOTAXI_HOST + '/itinerary/base/v1/mini-program/navigation/select-route',
        method: 'POST',
        payload
    }, true);
}

// 保存订单
export const saveOrder = async (payload: SaveOrderPayload): Promise<SaveOrderResponse> => {
    return request({
        url: _ROBOTAXI_HOST + '/itinerary/base/v1/mini-program/order/save',
        method: 'POST',
        payload
    }, true);
}

// 信用下单
export const createCreditPayOrder = async (
    payload: SaveOrderPayload
): Promise<SaveOrderResponse> => {
    return request({
        url: _ROBOTAXI_HOST + `/order/api/v1/mini-program/order/creditPay/createOrder`,
        method: 'POST',
        payload,
        showToast: false
    }, true);
}

// 获取等待时间
export const getWaitTime = async (payload: GetWaitTimePayload): Promise<NumericLike> => {
    return request({
        url: _ROBOTAXI_HOST + '/itinerary/base/v1/mini-program/pricing/getWaitTime',
        method: 'POST',
        payload
    }, true);
}

// 查询订单车辆信息
export const queryVehicleByOrderId = async (
    payload: OrderIdPayload
): Promise<QueryVehicleByOrderIdResponse> => {
    return request({
        url: _ROBOTAXI_HOST + '/order/api/v1/mini-program/order/queryVehicleByOrderId',
        method: 'GET',
        payload
    }, true);
}

// 设置温度
export const setTemperature = async (payload: SetTemperaturePayload): Promise<SetTemperatureResponse> => {
    return withApiLog('设置空调温度', payload, request({
        url: _ROBOTAXI_HOST + '/vehicleConvoy/api/v1/mini-program/order/ac/set-temperature',
        method: 'POST',
        payload,
        showToast: false
    }, true));
}

// 设置温度并跳过业务异常拦截，供初始化越界温度纠正场景使用
export const setTemperatureIgnoreBusinessError = async (payload: SetTemperaturePayload): Promise<SetTemperatureResponse> => {
    return withApiLog('设置空调温度(忽略业务异常)', payload, request({
        url: _ROBOTAXI_HOST + '/vehicleConvoy/api/v1/mini-program/order/ac/set-temperature',
        method: 'POST',
        payload,
        skipException: true,
        showToast: false
    }, true));
}

// 解锁车辆
export const unlockVehicle = async (payload: UnlockVehiclePayload): Promise<UnlockVehicleResponse> => {
    return request({
        url: _ROBOTAXI_HOST + '/vehicleConvoy/api/v1/mini-program/order/vehicle/unlock',
        method: 'POST',
        payload,
        showToast: true,
        skipException: true
    }, true);
}

// 查询车辆温度
export const queryTemperatureByOrderId = async (
    payload: OrderIdPayload
): Promise<QueryTemperatureByOrderIdResponse> => {
    return withApiLog('查询车辆温度', payload, request({
        url: _ROBOTAXI_HOST + '/vehicleConvoy/api/v1/mini-program/order/queryTemperatureByOrderId',
        method: 'GET',
        payload
    }, true));
}

// 查询车辆空调开关状态
export const queryVehicleAirConditionerSwitch = async (
    payload: OrderIdPayload
): Promise<QueryVehicleAirConditionerSwitchResponse> => {
    return withApiLog('查询空调开关状态', payload, request({
        url: _ROBOTAXI_HOST + '/vehicleConvoy/api/v1/mini-program/order/queryVehicleAirConditionerSwitch',
        method: 'GET',
        payload
    }, true));
}

// 车辆空调开关控制
export const airConditionerUnlock = async (payload: AirConditionerUnlockPayload): Promise<void> => {
    return withApiLog('空调开关控制', payload, request({
        url: _ROBOTAXI_HOST + '/vehicleConvoy/api/v1/mini-program/order/airConditionerUnlock',
        method: 'POST',
        payload,
        showToast: false
    }, true));
}

// 查询后备箱开启状态
export const queryVehicleTrunkOpenStatus = async (
    payload: OrderIdPayload
): Promise<QueryVehicleTrunkOpenStatusResponse> => {
    return request({
        url: _ROBOTAXI_HOST + '/vehicleConvoy/api/v1/mini-program/order/queryVehicleTrunkOpenStatus',
        method: 'GET',
        payload
    }, true);
}

// 获取自动结束行程时间
export const queryOrderFinishTime = async (): Promise<NumericLike> => {
    return request({
        url: _ROBOTAXI_HOST + '/operation/api/v1/mini-program/support/getOrderFinishTime',
        method: 'GET'
    }, true);
}

// 结束订单
export const endOrder = async (payload: OrderId): Promise<EndOrderResponse> => {
    return request({
        url: _ROBOTAXI_HOST + `/order/api/v1/mini-program/order/endTrip/${payload}`,
        method: 'PUT',
        payload: {
            orderId: String(payload)
        }
    }, true);
}

// 修改目的地
export const orderChange = async (payload: OrderChangePayload): Promise<void> => {
    return request({
        url: _ROBOTAXI_HOST + '/itinerary/api/v1/mini-program/order/orderChange',
        method: 'POST',
        payload
    }, true);
}

// 查询修改目的地剩余次数
export const getUpdateAddressNum = async (orderId: string): Promise<number> => {
    return request({
        url: _ROBOTAXI_HOST + `/itinerary/api/v1/mini-program/order/getUpdateAddressNum/${orderId}`,
        method: 'POST'
    }, true);
}

// 查询订单费用明细
export const queryFareBreakdown = async (
    payload: QueryFareBreakdownPayload
): Promise<QueryFareBreakdownResponse> => {
    return request({
        url: _ROBOTAXI_HOST + '/order/api/v1/mini-program/order/fare-breakdown',
        method: 'POST',
        payload
    }, true);
}

// 提交订单评价
export const submitOrderComment = async (
    payload: SubmitOrderCommentPayload
): Promise<SubmitFeedbackResponse> => {
    return request({
        url: _ROBOTAXI_HOST + `/order/api/v1/mini-program/order/comment`,
        method: 'POST',
        payload
    }, true);
}

// 获取订单评价类型
export const getOrderCommentType = async (evaluateDimension: number): Promise<OrderCommentTypeItem[]> => {
    return request({
        // url: _ROBOTAXI_HOST + `/operation/base/v1/mini-program/feedback-type/getList`,
        url: _ROBOTAXI_HOST + `/operation/base/v1/mini-program/evaluateTag/list?evaluateDimension=${evaluateDimension}`,
        method: 'GET'
    }, true);
}

// 获取订单支付入口信息
export const getOrderPayment = async (payload): Promise<OrderPaymentResponse> => {
    return request({
        url: _ROBOTAXI_HOST + `/order/api/v1/mini-program/order/payment`,
        method: 'POST',
        payload
    }, true);
}

// 根据订单 ID 查询支付结果（服务端已完成内部轮询）
export const queryOrderPaymentResultFromOrderId = async (orderId: string | number): Promise<QueryOrderPaymentResultResponse> => {
    return request({
        url: _ROBOTAXI_HOST + `/order/api/v1/mini-program/order/queryOrderStatusFromOrderId`,
        method: 'GET',
        payload: {
            orderId: String(orderId)
        }
    }, true);
}

// 取消订单
export const cancelOrder = async (orderId: OrderId): Promise<void> => {
    return request({
        url: _ROBOTAXI_HOST + `/order/api/v1/mini-program/order/cancel/${orderId}`,
        method: 'PUT',
        payload: {
            orderId: String(orderId)
        }
    }, true);
}

// 查询信用分授权结果
export const queryLedgerCreditOrderResult = async (orderId: OrderId): Promise<QueryLedgerCreditOrderResultResponse> => {
    return request({
        url: _ROBOTAXI_HOST + `/order/api/v1/mini-program/order/queryLedgerCreditOrderResult`,
        method: 'POST',
        payload: {
            orderId: String(orderId)
        },
        skipException: true,
        showToast: false
    }, true);
}

// 订单查询实时轨迹路线
export const queryOrderRoute = async (
    payload: QueryOrderRoutePayload
): Promise<QueryOrderRouteResponse> => {
    return request({
        url: _ROBOTAXI_HOST + `/order/api/v1/mini-program/order/queryOrderRoute`,
        method: 'POST',
        payload
    }, true);
}

// 订单查询轨迹
export const queryOrderTrajectory = async (
    payload: QueryOrderRoutePayload
): Promise<QueryOrderRouteResponse> => {
    return request({
        url: _ROBOTAXI_HOST + `/order/api/v1/mini-program/order/queryOrderTrajectory`,
        method: 'GET',
        payload
    }, true);
}

// 静默查询订单轨迹，供分享页自行处理业务异常，避免默认拦截 toast。
export const queryOrderTrajectorySilently = async (
    payload: QueryOrderRoutePayload
): Promise<any> => {
    return request({
        // url: _ROBOTAXI_HOST + `/order/api/v1/mini-program/order/queryOrderTrajectory`,
        url: _ROBOTAXI_HOST + `/order/base/v1/mini-program/orderActive/share/queryOrderTrajectory`,
        method: 'GET',
        payload,
        showToast: false,
        skipException: true
    }, true);
}

// 订单查询队列状态
export const queryOrderQueueStatus = async (
    payload: QueryOrderQueueStatusPayload
): Promise<QueryOrderQueueStatusResponse> => {
    return request({
        url: _ROBOTAXI_HOST + `/itinerary/base/v1/mini-program/order/queue-status`,
        method: 'GET',
        payload
    }, true);
}

// 静默查询分享订单实时路线，供分享页自行处理业务异常，避免默认拦截 toast。
export const shareQueryOrderRouteSilently = async (orderId: OrderId): Promise<any> => {
    return request({
        url: _ROBOTAXI_HOST + `/order/base/v1/mini-program/orderActive/share/queryOrderRoute/${orderId}`,
        method: 'GET',
        showToast: false,
        skipException: true
    }, true);
}

// 静默查询分享订单详情，供分享页自行处理业务异常，避免默认拦截 toast。
export const shareQueryOrderInfoSilently = async (
    payload: ShareQueryOrderInfoPayload
): Promise<any> => {
    return request({
        url: _ROBOTAXI_HOST + '/order/base/v1/mini-program/orderActive/share/orderInfo',
        method: 'GET',
        payload,
        showToast: false,
        skipException: true
    }, true);
}
