import { Schema } from 'mongoose';
import {
  ICallTask,
  IMeetingTask,
  IOtherTask,
  ISiteVisitTask,
} from '@/modules/tasks/tasks.interface';
import { CallStatus } from '../tasks.constant';

export const tasksCallSchema = new Schema<Pick<ICallTask, 'callStatus'>>({
  callStatus: {
    type: String,
    required: true,
    enum: Object.values(CallStatus),
  },
});

export const tasksMeetingSchema = new Schema<Pick<IMeetingTask, 'location'>>({
  location: { type: String, required: true },
});

export const tasksSiteVisitSchema = new Schema<Pick<ISiteVisitTask, 'project' | 'property' | 'siteVisitImage'>>(
  {
    project: { type: Schema.Types.ObjectId, ref: 'Project', required: false },
    property: { type: Schema.Types.ObjectId, ref: 'individualProperties', required: false },
    siteVisitImage: { type: String, required: false },
  },
);

// Add validation to ensure either project or property is provided
tasksSiteVisitSchema.pre('validate', function (next) {
  if (!this.project && !this.property) {
    next(new Error('Either project or property is required for site visit task'));
  } else {
    next();
  }
});

export const tasksOtherSchema = new Schema<Pick<IOtherTask, 'activityName' | 'project'>>({
  activityName: { type: String, required: true },
  project: { type: Schema.Types.ObjectId, ref: 'Project' },
});
