/**
 * 订单服务模块
 * 负责订单创建和支付相关的逻辑
 */

import { campApi } from '../../../config/camp_api.js';
import * as dataFetcher from './data-fetcher.js';

/**
 * 创建订单并支付
 * @param {Object} context - 页面上下文
 * @param {String} sectionId - 小节ID
 * @param {Number} priceFen - 价格（分）
 * @param {Object} section - 小节信息
 */
export function createOrderAndPay(context, sectionId, priceFen, section) {
	var campId = context.data.campId;
	var userId = wx.getStorageSync('wxuserid') || '';
	var openid = wx.getStorageSync('wxopenid') || '';
	
	if (!userId || !openid) {
		wx.showToast({
			title: '用户信息缺失，请重新登录',
			icon: 'none'
		});
		return Promise.resolve(false);
	}
	
	// 创建订单（包含 openid，后端会自动生成预支付信息）
	var orderData = {
		user_id: String(userId),
		camp_id: String(campId),
		section_id: String(sectionId),
		payment_method: 'WECHAT',
		openid: openid
	};
	
	return campApi.createOrder(orderData)
		.then(function (orderRes) {
			if (!orderRes || orderRes.success !== true || !orderRes.order_id) {
				throw new Error(orderRes && orderRes.message || '创建订单失败');
			}
			
			var orderId = orderRes.order_id;
			
			// 如果订单金额为0，直接成功（免费订单）
			if (orderRes.actual_amount === 0 || orderRes.order_status === 'PAID') {
				wx.showToast({
					title: '订单创建成功',
					icon: 'success'
				});
				dataFetcher.fetchCampData(context, campId);
				return true;
			}
			
			// 如果返回了预支付信息，直接调起微信支付
			if (orderRes.prepay_id && orderRes.pay_sign) {
				var payParams = {
					timeStamp: orderRes.time_stamp || orderRes.timeStamp,
					nonceStr: orderRes.nonce_str || orderRes.nonceStr,
					package: orderRes.package || 'prepay_id=' + orderRes.prepay_id,
					signType: orderRes.sign_type || orderRes.signType || 'RSA',
					paySign: orderRes.pay_sign || orderRes.paySign
				};
				
				return new Promise(function (resolve, reject) {
					wx.requestPayment({
						timeStamp: payParams.timeStamp,
						nonceStr: payParams.nonceStr,
						package: payParams.package,
						signType: payParams.signType,
						paySign: payParams.paySign,
						success: function (res) {
							wx.showToast({
								title: '支付成功',
								icon: 'success'
							});
							dataFetcher.fetchCampData(context, campId);
							resolve(true);
						},
						fail: function (err) {
							if (err.errMsg === 'requestPayment:fail cancel') {
								// 用户取消支付，调用取消订单接口
								campApi.cancelOrder({ order_id: orderId })
									.then(function (cancelRes) {
										wx.showToast({
											title: '已取消支付',
											icon: 'none'
										});
									})
									.catch(function (cancelErr) {
										wx.showToast({
											title: '已取消支付',
											icon: 'none'
										});
									});
							} else {
								wx.showToast({
									title: '支付失败',
									icon: 'none'
								});
							}
							reject(err);
						}
					});
				});
			} else {
				// 如果没有预支付信息，说明订单创建成功但不需要支付
				wx.showToast({
					title: '订单创建成功',
					icon: 'success'
				});
				dataFetcher.fetchCampData(context, campId);
				return true;
			}
		})
		.catch(function (err) {
			wx.showToast({
				title: err && err.message || '支付失败',
				icon: 'none'
			});
			return false;
		});
}

