/**
 * RestoreLog Model
 *
 * Tracks every restore operation for audit and history purposes.
 * Records who restored which backup, when, and the outcome.
 */

import mongoose, { Schema, Document } from 'mongoose';

export interface IRestoreLog extends Document {
  backupId: string;             // Reference to the Backup document (or 'upload' for ZIP uploads)
  backupName: string;           // Name of the backup at time of restore
  companyId: string;            // Company that was restored
  companyName: string;          // Company name at time of restore
  restoredBy: string;           // User ID who performed the restore
  restoredByName: string;       // User name who performed the restore
  source: 'history' | 'upload'; // Whether restored from history or uploaded ZIP
  status: 'completed' | 'failed' | 'partial';
  version: string;              // Backup format version
  categoriesRestored: number;
  recordsRestored: number;
  filesRestored: number;
  totalCategories: number;
  duration: number;             // Duration in milliseconds
  errorMessage?: string;
  warnings: string[];
  createdAt: Date;
  updatedAt: Date;
}

const RestoreLogSchema = new Schema<IRestoreLog>({
  backupId: {
    type: String,
    required: true,
    index: true,
  },
  backupName: {
    type: String,
    required: true,
  },
  companyId: {
    type: String,
    required: true,
    index: true,
  },
  companyName: {
    type: String,
    default: '',
  },
  restoredBy: {
    type: String,
    required: true,
  },
  restoredByName: {
    type: String,
    default: 'Unknown',
  },
  source: {
    type: String,
    enum: ['history', 'upload'],
    required: true,
  },
  status: {
    type: String,
    enum: ['completed', 'failed', 'partial'],
    default: 'completed',
  },
  version: {
    type: String,
    default: '1.0',
  },
  categoriesRestored: {
    type: Number,
    default: 0,
  },
  recordsRestored: {
    type: Number,
    default: 0,
  },
  filesRestored: {
    type: Number,
    default: 0,
  },
  totalCategories: {
    type: Number,
    default: 0,
  },
  duration: {
    type: Number,
    default: 0,
  },
  errorMessage: {
    type: String,
  },
  warnings: [{
    type: String,
  }],
}, {
  timestamps: true,
  toJSON: { virtuals: true },
  toObject: { virtuals: true },
});

// Indexes
RestoreLogSchema.index({ companyId: 1, createdAt: -1 });
RestoreLogSchema.index({ restoredBy: 1 });

export const RestoreLog = mongoose.models.RestoreLog || mongoose.model<IRestoreLog>('RestoreLog', RestoreLogSchema);