import mongoose from 'mongoose';

export interface IImage {
  _id: string;
  filename: string;
  originalName: string;
  mimetype: string;
  size: number;
  data: Buffer;
  uploadedAt: Date;
  uploadedBy: string;
  funnelId?: string; // Связь с воронкой для возможной очистки
  description?: string;
}

const ImageSchema = new mongoose.Schema<IImage>({
  filename: {
    type: String,
    required: true,
    unique: true,
    trim: true
  },
  originalName: {
    type: String,
    required: true,
    trim: true
  },
  mimetype: {
    type: String,
    required: true,
    validate: {
      validator: function(v: string) {
        // Поддержка изображений и видео форматов
        return /^(image\/(jpeg|jpg|png|gif|webp|svg\+xml)|video\/(mp4|quicktime|webm))$/i.test(v);
      },
      message: 'Only image and video files are allowed (JPG, PNG, WebP, GIF, MP4, MOV, WebM)'
    }
  },
  size: {
    type: Number,
    required: true,
    max: 10 * 1024 * 1024 // 10MB максимум (увеличено для видео)
  },
  data: {
    type: Buffer,
    required: true
  },
  uploadedAt: {
    type: Date,
    default: Date.now
  },
  uploadedBy: {
    type: String,
    default: 'admin'
  },
  funnelId: {
    type: String,
    index: { sparse: true } // Индекс только для не-null значений
  },
  description: {
    type: String,
    maxlength: 500
  }
}, {
  timestamps: true,
  collection: 'images'
});

// Дополнительные индексы для производительности
ImageSchema.index({ uploadedAt: -1 });

export const Image = mongoose.models.Image || mongoose.model<IImage>('Image', ImageSchema);
