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

export interface IInventoryItemDocument extends Document {
  // _id is handled by Mongoose
  itemCode: string;
  name: string;
  category: 'CriticalSpare' | 'Consumable' | 'Tool' | 'Equipment' | 'Critical Spare' | 'Safety Gear';
  unit: string;
  minStockLevel: number;
  maxStockLevel?: number;
  reorderPoint?: number;
  currentStock: number;
  unitCost?: number;
  supplierId?: mongoose.Types.ObjectId;
  supplier?: string;
  location?: string;
  createdAt: Date;
  updatedAt: Date;
}

const inventoryItemSchema = new Schema<IInventoryItemDocument>(
  {
    itemCode: { type: String, required: true, unique: true },
    name: { type: String, required: true },
    category: {
      type: String,
      enum: ['CriticalSpare', 'Consumable', 'Tool', 'Equipment', 'Critical Spare', 'Safety Gear'],
      required: true,
    },
    unit: { type: String, required: true },
    minStockLevel: { type: Number, required: true, default: 0 },
    maxStockLevel: Number,
    reorderPoint: Number,
    currentStock: { type: Number, required: true, default: 0 },
    unitCost: Number,
    supplierId: { type: Schema.Types.ObjectId, ref: 'Supplier' },
    supplier: String,
    location: String,
  },
  {
    timestamps: true,
  }
);

inventoryItemSchema.index({ category: 1 });
inventoryItemSchema.index({ currentStock: 1 });

export const InventoryItem = mongoose.model<IInventoryItemDocument>('InventoryItem', inventoryItemSchema);
