const { DataTypes } = require('sequelize'); const sequelize = require('../config/database'); const Rental = sequelize.define('Rental', { id: { type: DataTypes.UUID, defaultValue: DataTypes.UUIDV4, primaryKey: true }, itemId: { type: DataTypes.UUID, allowNull: false, references: { model: 'Items', key: 'id' } }, renterId: { type: DataTypes.UUID, allowNull: false, references: { model: 'Users', key: 'id' } }, ownerId: { type: DataTypes.UUID, allowNull: false, references: { model: 'Users', key: 'id' } }, startDate: { type: DataTypes.DATE, allowNull: false }, endDate: { type: DataTypes.DATE, allowNull: false }, startTime: { type: DataTypes.STRING }, endTime: { type: DataTypes.STRING }, totalAmount: { type: DataTypes.DECIMAL(10, 2), allowNull: false }, baseRentalAmount: { type: DataTypes.DECIMAL(10, 2), allowNull: false }, platformFee: { type: DataTypes.DECIMAL(10, 2), allowNull: false }, processingFee: { type: DataTypes.DECIMAL(10, 2), allowNull: false }, payoutAmount: { type: DataTypes.DECIMAL(10, 2), allowNull: false }, status: { type: DataTypes.ENUM('pending', 'confirmed', 'active', 'completed', 'cancelled'), defaultValue: 'pending' }, paymentStatus: { type: DataTypes.ENUM('pending', 'paid', 'refunded'), defaultValue: 'pending' }, payoutStatus: { type: DataTypes.ENUM('pending', 'processing', 'completed', 'failed'), defaultValue: 'pending' }, payoutProcessedAt: { type: DataTypes.DATE }, stripeTransferId: { type: DataTypes.STRING }, deliveryMethod: { type: DataTypes.ENUM('pickup', 'delivery'), defaultValue: 'pickup' }, deliveryAddress: { type: DataTypes.TEXT }, notes: { type: DataTypes.TEXT }, // Renter's review of the item (existing fields renamed for clarity) itemRating: { type: DataTypes.INTEGER, validate: { min: 1, max: 5 } }, itemReview: { type: DataTypes.TEXT }, itemReviewSubmittedAt: { type: DataTypes.DATE }, itemReviewVisible: { type: DataTypes.BOOLEAN, defaultValue: false }, // Owner's review of the renter renterRating: { type: DataTypes.INTEGER, validate: { min: 1, max: 5 } }, renterReview: { type: DataTypes.TEXT }, renterReviewSubmittedAt: { type: DataTypes.DATE }, renterReviewVisible: { type: DataTypes.BOOLEAN, defaultValue: false }, // Private messages (always visible to recipient) itemPrivateMessage: { type: DataTypes.TEXT }, renterPrivateMessage: { type: DataTypes.TEXT }, // Legacy fields for backwards compatibility rating: { type: DataTypes.INTEGER, validate: { min: 1, max: 5 } }, review: { type: DataTypes.TEXT } }); module.exports = Rental;