import mongoose, { Schema, Document, Model } from 'mongoose';

export interface IImportBatch extends Document {
  batchId: string;
  filename: string;
  fileType: string;
  fileSize: number;
  status: 'Uploaded' | 'Parsed' | 'Validated' | 'AwaitingConfirmation' | 'Processing' | 'Completed' | 'Failed' | 'Cancelled';
  totalRows: number;
  successRows: number;
  skippedRows: number;
  failedRows: number;
  importedBy: mongoose.Types.ObjectId; // References User
  createdAt: Date;
  startedAt?: Date;
  completedAt?: Date;
}

const ImportBatchSchema = new Schema<IImportBatch>({
  batchId: { type: String, required: true, unique: true, index: true },
  filename: { type: String, required: true },
  fileType: { type: String, required: true },
  fileSize: { type: Number, required: true },
  status: {
    type: String,
    enum: ['Uploaded', 'Parsed', 'Validated', 'AwaitingConfirmation', 'Processing', 'Completed', 'Failed', 'Cancelled'],
    required: true,
    default: 'Uploaded'
  },
  totalRows: { type: Number, default: 0 },
  successRows: { type: Number, default: 0 },
  skippedRows: { type: Number, default: 0 },
  failedRows: { type: Number, default: 0 },
  importedBy: { type: Schema.Types.ObjectId, ref: 'User', required: true }
}, {
  timestamps: { createdAt: 'createdAt', updatedAt: false }
});

export const ImportBatch: Model<IImportBatch> =
  mongoose.models.ImportBatch || mongoose.model<IImportBatch>('ImportBatch', ImportBatchSchema);
export default ImportBatch;
