const mongoose = require('mongoose');

const blogCommentSchema = new mongoose.Schema({
  postId: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'Blog',
    required: true
  },
  authorName: {
    type: String,
    required: true,
    trim: true // "Frank Flores"
  },
  authorAvatar: {
    type: String,
    default: '' // "/assets/img/inner-page/news-details/comment-1.png"
  },
  content: {
    type: String,
    required: true,
    trim: true
  },
  parentId: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'BlogComment',
    default: null // Cho threaded comments (reply)
  },
  status: {
    type: String,
    enum: ['pending', 'approved', 'rejected'],
    default: 'pending'
  }
}, {
  timestamps: true // Vẫn giữ timestamps cho admin quản lý
});

// Indexes
blogCommentSchema.index({ postId: 1, status: 1, createdAt: -1 });
blogCommentSchema.index({ parentId: 1 });
blogCommentSchema.index({ status: 1 });

// Remove __v from JSON output
blogCommentSchema.set('toJSON', {
  transform: function(doc, ret) {
    delete ret.__v;
    return ret;
  }
});

// Static methods
blogCommentSchema.statics.getApprovedByPost = function(postId) {
  return this.find({ 
    postId: postId,
    status: 'approved',
    parentId: null // Chỉ lấy comments gốc, không lấy replies
  }).sort({ createdAt: -1 });
};

blogCommentSchema.statics.getReplies = function(parentId) {
  return this.find({ 
    parentId: parentId,
    status: 'approved'
  }).sort({ createdAt: 1 }); // Replies sắp xếp theo thời gian tăng dần
};

blogCommentSchema.statics.getByStatus = function(status) {
  return this.find({ status: status })
    .populate('postId', 'title slug')
    .sort({ createdAt: -1 });
};

// Method to approve comment
blogCommentSchema.methods.approve = function() {
  this.status = 'approved';
  return this.save();
};

// Method to reject comment
blogCommentSchema.methods.reject = function() {
  this.status = 'rejected';
  return this.save();
};

module.exports = mongoose.model('BlogComment', blogCommentSchema);