<?php
/**
 * Implements hook_cron().
 * Enqueue simple deadline reminders when within 3 days.
 */
function umss_core_cron() {
  $storage = \Drupal::entityTypeManager()->getStorage('node');
  $nids = \Drupal::entityQuery('node')->accessCheck(FALSE)->condition('type','manuscript')->execute();
  $queue = \Drupal::service('queue')->get('umss_deadline_reminder');
  $now = new \DateTime('now', new \DateTimeZone('UTC'));
  foreach ($storage->loadMultiple($nids) as $n) {
    if ($n->hasField('field_review_deadline') && !$n->get('field_review_deadline')->isEmpty()) {
      $deadline = new \DateTime($n->get('field_review_deadline')->value);
      $diff = (int)$deadline->diff($now)->format('%r%a');
      if ($diff <= 3 && $diff >= 0 && $n->hasField('field_reviewers')) {
        foreach ($n->get('field_reviewers')->referencedEntities() as $u) {
          $queue->createItem(['nid'=>$n->id(),'email'=>$u->getEmail(),'title'=>$n->label(),'deadline'=>$deadline->format('Y-m-d')]);
        }
      }
    }
  }
}