<?php

namespace Drupal\popsu_programme\Plugin\Field\FieldType;

use Drupal\Core\Entity\FieldableEntityInterface;
use Drupal\Core\Field\EntityReferenceFieldItemList;
use Drupal\Core\Field\EntityReferenceFieldItemListInterface;
use Drupal\Core\Field\FieldItemList;
use Drupal\Core\TypedData\TypedDataInterface;
use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\Core\TypedData\ComputedItemListTrait;

// https://www.drupal.org/node/2112677
// https://www.cornel.co/article/entity-reference-computed-field-example-drupal
// https://www.caxy.com/blog/drupal-custom-form-and-computed-fields

class ComputedThemesReferences extends EntityReferenceFieldItemList
{
  use ComputedItemListTrait;

  /**
   * The entity type manager.
   *
   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
   */
  protected $entityTypeManager;

  /**
   * {@inheritdoc}
   */
  public function __construct(BaseFieldDefinition $definition, $name, TypedDataInterface $parent) {
    parent::__construct($definition, $name, $parent);
    $this->entityTypeManager = \Drupal::entityTypeManager();
  }

  /**
   * Compute the values.
   */
  protected function computeValue() {
    // $query = \Drupal::entityQuery('node')
    $entity = $this->getEntity();
    $storage = \Drupal::service('entity_type.manager')->getStorage('node');
    $query = $storage->getQuery()
      ->condition('status', 1)
      ->condition('type', 'theme')
      ->condition('field_programme', $entity->id());
    $results = $query->execute();
    if ($results) {
      $nids = array_values($results);
      $i = 0;
      foreach ($nids as $key => $nid) {
        $this->list[$i] = $this->createItem($i, $nid);
        $i++;
      }
    }
  }

}
