import mongoose from "mongoose";

const BaseCheckSchema = mongoose.Schema({
	/**
	 * Reference to the associated Monitor document.
	 *
	 * @type {mongoose.Schema.Types.ObjectId}
	 */
	monitorId: {
		type: mongoose.Schema.Types.ObjectId,
		ref: "Monitor",
		immutable: true,
		index: true,
	},

	teamId: {
		type: mongoose.Schema.Types.ObjectId,
		ref: "Team",
		immutable: true,
		index: true,
	},
	/**
	 * Status of the check (true for up, false for down).
	 *
	 * @type {Boolean}
	 */
	status: {
		type: Boolean,
		index: true,
	},
	/**
	 * Response time of the check in milliseconds.
	 *
	 * @type {Number}
	 */
	responseTime: {
		type: Number,
	},
	/**
	 * HTTP status code received during the check.
	 *
	 * @type {Number}
	 */
	statusCode: {
		type: Number,
		index: true,
	},
	/**
	 * Message or description of the check result.
	 *
	 * @type {String}
	 */
	message: {
		type: String,
	},
	/**
	 * Expiry date of the check, auto-calculated to expire after 30 days.
	 *
	 * @type {Date}
	 */

	expiry: {
		type: Date,
		default: Date.now,
		expires: 60 * 60 * 24 * 30, // 30 days
	},
});

/**
 * Check Schema for MongoDB collection.
 *
 * Represents a check associated with a monitor, storing information
 * about the status and response of a particular check event.
 */
const CheckSchema = mongoose.Schema({ ...BaseCheckSchema.obj }, { timestamps: true });
CheckSchema.index({ updatedAt: 1 });
CheckSchema.index({ monitorId: 1, updatedAt: 1 });
CheckSchema.index({ monitorId: 1, updatedAt: -1 });
CheckSchema.index({ teamId: 1, updatedAt: -1 });

export default mongoose.model("Check", CheckSchema);
export { BaseCheckSchema };
