// Modelo Tarea
import { Schema } from 'mongoose';

/**
 * Esquema de Tarea para la base de datos.
 * Representa las tareas asociadas a un tablero en el sistema.
 * 
 * Campos:
 * - nombre: Nombre descriptivo de la tarea.
 * - descripcion: Detalle adicional sobre la tarea.
 * - prioridad: Nivel de importancia de la tarea ('baja', 'media', 'alta').
 * - estado: Estado actual de la tarea ('pendiente', 'en proceso', 'en revisión', 'completada').
 * - fechaLimite: Fecha límite para completar la tarea.
 * - asignadoA: Usuario al que se le ha asignado la tarea.
 * - comentarios: Lista de comentarios asociados a la tarea.
 * - tablero: Tablero al que pertenece la tarea.
 * 
 * Timestamps:
 * - created_at: Fecha de creación del registro.
 * - updated_at: Fecha de última actualización del registro.
 */
export const tareaSchema = new Schema({
  /** Nombre descriptivo de la tarea */
  nombre: {
    type: String,
    required: true,
    trim: true
  },
  /** Detalle adicional sobre la tarea */
  descripcion: {
    type: String,
    trim: true
  },
  /** Nivel de importancia de la tarea */
  prioridad: {
    type: String,
    enum: ['baja', 'media', 'alta'],
    default: 'media'
  },
  /** Estado actual de la tarea */
  estado: {
    type: String,
    enum: ['pendiente', 'en_proceso', 'en_revision', 'completada'],
    default: 'pendiente'
  },
  /** Fecha límite para completar la tarea */
  fechaLimite: {
    type: Date,
    default: null
  },
  /** Usuario al que se le ha asignado la tarea */
  asignadoA: {
    type: Schema.Types.ObjectId,
    ref: 'Usuario',
    default: null
  },
  /** Lista de comentarios asociados a la tarea */
  comentarios: [
    {
      /** Usuario que realizó el comentario */
      usuario: {
        type: Schema.Types.ObjectId,
        ref: 'Usuario',
        required: true
      },
      /** Mensaje del comentario */
      mensaje: {
        type: String,
        required: true
      },
      /** Fecha en que se realizó el comentario */
      fecha: {
        type: Date,
        default: Date.now
      }
    }
  ],
  /** Tablero al que pertenece la tarea */
  tablero: {
    type: Schema.Types.ObjectId,
    ref: 'Tablero',
    required: true
  },
},
  {
    timestamps: { createdAt: 'createdAt', updatedAt: 'updatedAt' }
  }
);