const mongoose = require('mongoose'); const orderItemSchema = new mongoose.Schema({ product: { type: mongoose.Schema.Types.ObjectId, ref: 'Product', required: true }, name: { type: String, required: true }, image: { type: String, required: true }, price: { type: Number, required: true }, quantity: { type: Number, required: true }, variantColor: { type: String, default: '' }, variantFinish: { type: String, default: '' }, sku: { type: String, default: '' } }); const statusHistorySchema = new mongoose.Schema({ status: { type: String, required: true }, note: { type: String, default: '' }, updatedAt: { type: Date, default: Date.now } }); const orderSchema = new mongoose.Schema({ orderNumber: { type: String, required: true, unique: true }, user: { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true }, orderItems: [orderItemSchema], // Indian Shipping Address Schema shippingAddress: { fullName: { type: String, default: '' }, mobileNumber: { type: String, required: true }, addressLine1: { type: String, required: true }, addressLine2: { type: String, default: '' }, landmark: { type: String, default: '' }, city: { type: String, required: true }, district: { type: String, default: '' }, state: { type: String, required: true }, postalCode: { type: String, required: true }, // 6-digit PIN code country: { type: String, required: true, default: 'India' } }, // Payment Configuration paymentMethod: { type: String, required: true, enum: ['Razorpay', 'UPI', 'Stripe', 'Credit/Debit Card', 'Net Banking', 'Cash on Delivery'] }, paymentResult: { id: { type: String }, status: { type: String }, update_time: { type: String }, email_address: { type: String } }, // Pricing & Indian GST breakdown itemsPrice: { type: Number, required: true, default: 0 }, gstPercentage: { type: Number, default: 18 }, cgst: { type: Number, default: 0 }, sgst: { type: Number, default: 0 }, igst: { type: Number, default: 0 }, taxPrice: { type: Number, required: true, default: 0 }, shippingPrice: { type: Number, required: true, default: 0 }, discountAmount: { type: Number, default: 0 }, totalAmount: { type: Number, required: true, default: 0 }, // Order Status Lifecycle orderStatus: { type: String, enum: ['Pending', 'Payment Pending', 'Payment Confirmed', 'Processing', 'Packed', 'Shipped', 'Out for Delivery', 'Delivered', 'Cancelled', 'Returned', 'Refunded'], default: 'Pending' }, statusHistory: [statusHistorySchema], // Indian Courier Logistics courierProvider: { type: String, default: 'Delhivery' }, // Delhivery, BlueDart, Bluedart, FedEx, Xpressbees awbNumber: { type: String, default: '' }, trackingNumber: { type: String, default: '' }, trackingUrl: { type: String, default: '' }, estimatedDeliveryDate: { type: Date }, isPaid: { type: Boolean, default: false }, paidAt: { type: Date }, isDelivered: { type: Boolean, default: false }, deliveredAt: { type: Date }, notes: { type: String, default: '' } }, { timestamps: true }); module.exports = mongoose.model('Order', orderSchema);