import { Schema, model, Document, Types } from 'mongoose'

const PaymentSchema = new Schema(
	{
		amount: {
			type: Number,
			required: true,
		},
		user: {
			type: Types.ObjectId,
			ref: 'User',
			required: true,
		},
		stripeCheckoutId: {
			type: String,
			required: true,
		},
		data: Schema.Types.Mixed,
		status: {
			type: String,
			enum: ['pending', 'completed', 'expired'],
			default: 'pending',
		},
		request: {
			type: Types.ObjectId,
			ref: 'Request',
		},
		community: {
			type: Types.ObjectId,
			ref: 'Community',
			required: true,
		},
		communities: [{
			type: Types.ObjectId,
			ref: 'Community',
		}],
		url: {
			type: String,
			required: true
		},
		completedAt: Date,
		expiredAt: Date,
	},
	{ versionKey: false, timestamps: true }
)

export interface IPayment extends Document {
	_id: Types.ObjectId
	amount: number
	user: Types.ObjectId
	stripeCheckoutId: string
	data?: Record<string, any>
	status: 'pending' | 'completed' | 'expired'
	request?: Types.ObjectId
	community: Types.ObjectId
	communities: Types.ObjectId[]
	url: string
	completedAt?: Date
	expiredAt?: Date
	createdAt: Date
	updatedAt: Date
}

export const Payment = model<IPayment>('Payment', PaymentSchema, 'payments')
