<?php

use Drupal\Core\Entity\EntityInterface;
use Drupal\user\UserInterface;

function umss_core_entity_insert(EntityInterface $entity) {
  if ($entity->getEntityTypeId() !== 'node') return;
  switch ($entity->bundle()) {
    case 'manuscript':
      $author = $entity->getOwner();
      _umss_core_mail($author->getEmail(), 'Submission received', 'Your manuscript "' . $entity->label() . '" was submitted.');
      _umss_core_notify_reviewers($entity);
      break;
    case 'review':
      $to = \Drupal::config('system.site')->get('mail');
      _umss_core_mail($to, 'Review submitted', 'A review has been submitted for manuscript ID ' . $entity->get('field_manuscript')->target_id . '.');
      break;
    case 'decision':
      $mid = $entity->get('field_manuscript')->target_id;
      $m = \Drupal\node\Entity\Node::load($mid);
      if ($m) {
        $author = $m->getOwner();
        $decision = $entity->get('field_decision')->value;
        _umss_core_mail($author->getEmail(), 'Decision made', 'Decision: ' . $decision . ' for manuscript "' . $m->label() . '"');
      }
      break;
  }
}

function umss_core_entity_update(EntityInterface $entity) {
  if ($entity->getEntityTypeId() === 'node' && $entity->bundle() === 'manuscript') {
    _umss_core_notify_reviewers($entity);
  }
}

function _umss_core_notify_reviewers($manuscript) {
  if (!$manuscript->hasField('field_reviewers')) return;
  foreach ($manuscript->get('field_reviewers')->referencedEntities() as $account) {
    if ($account instanceof UserInterface) {
      _umss_core_mail($account->getEmail(), 'You have been assigned a review', 'You have been assigned to review the manuscript "' . $manuscript->label() . '".');
    }
  }
}

function _umss_core_mail($to, $subject, $body) {
  if (!$to) return;
  $mailManager = \Drupal::service('plugin.manager.mail');
  $params['subject'] = $subject;
  $params['message'] = $body;
  $mailManager->mail('umss_core', 'default', $to, \Drupal::languageManager()->getDefaultLanguage()->getId(), $params);
}