module.exports = mongoose => {
    var editHistorySchema = mongoose.Schema({
        employee: String,
        date: Date
      });
    var eventDataSchema = mongoose.Schema({
        customer: {type: mongoose.Schema.Types.ObjectId, ref: 'Customer'},
        resource: {type: mongoose.Schema.Types.ObjectId, ref: 'Resource'},
        // These fields are legacy fields, we will keep it but won't use it again
        client_name: String,
        client_pharmacy: String,
        client_pcp: String,
        client_birth_date: String,
        client_seating: String,
        resource_type: String,
        resource_name: String,
        resource_phone: String,
        resource_contact: String,
        resource_address: String,
        resource_city: String,
        resource_state: String,
        // legacy fields end
        // We still wanna keep the legacy fields below
        new_patient: String,
        confirmed: String,
        fasting: String,
        interpreter: String,
        doc_order: String,
        need_id: String,
        need_med_list: String,
        notes: String,
        reason: String,
        other: String,
        disability: String,
        disability_support: String,
        video_type: String,
        video_id: String,
        presenter: String,
        trans_method: String,
      });
    var schema = mongoose.Schema(
        {
          title: String,
          type: String, 
          // value could be ['shopping', 'banking', 'singing', 'dancing', 'medical', 'haircut', 'meal', 'transportation', 'others']
          description: String,
          department: String,
          notes: String,
          start_time: Date,
          stop_time: Date,
          color: String,
          source_type: String,
          source_uuid: String,
          source_name: String,
          target_type: String,
          target_uuid: String,
          target_name: String,
          link_event_uuid: String,
          link_event_name: String,
          data: eventDataSchema,
          files: [{
            type: String
          }],
          status: String,
          confirmed: Boolean,
          // value could be ['active', 'inactive']
          signup_start_date: Date,
          member_col: Object,
          tags: [{
            type: String
          }],
          create_by: String,
          create_date: Date,
          edit_by: String,
          edit_date: Date,
          youtube_video_id: String,
          edit_history: [{
            type: editHistorySchema
          }], 
          site: Number,
          event_location: String,
          event_prediction_date: String,
          event_reminder_type: String,
          rrule: String,
          meal_type: String,
          // meal_type could be 'breakfast', 'lunch', 'snack'
          activity_category: String,
          // activity_category could be 'classes', 'games', 'events', 'outings', 'personal_care', 'care_activities'
          ingredients: String
        },
        { collection: 'calendar_event', timestamps: true }
      );
    schema.method("toJSON", function() {
        const { __v, _id, ...object } = this.toObject();
        object.id = _id;
        return object;
      });
    const CalendarEvent = mongoose.model("calendar_event", schema);
    return CalendarEvent;
  };