<?php

declare(strict_types=1);

namespace Drupal\opdavies_blog\Command;

use Drupal\Core\Database\Connection;
use Illuminate\Support\Collection;

final class ExportBodyValuesForThemePurgingCommand {

  private static array $tableNames = [
    'block_content__body',
    'node__body',
  ];

  private string $filename = 'body-field-values.txt';

  private Connection $database;

  public function __construct(Connection $database) {
    $this->database = $database;
  }

  /**
   * Drush command to export body field values into a file.
   *
   * @command opdavies:export-body-values-for-theme-purging
   */
  public function handle(): void {
    $values = Collection::make(self::$tableNames)
      ->flatMap(fn(string $tableName) => $this->getValuesFromTable($tableName))
      ->implode(PHP_EOL);

    file_put_contents($this->getFilePath(), $values);
  }

  private function getFilePath(): string {
    return drupal_get_path('theme', 'opdavies') . DIRECTORY_SEPARATOR . $this->filename;
  }

  private function getValuesFromTable(string $tableName): array {
    return $this->database->select($tableName)
      ->fields($tableName, ['body_value'])
      ->execute()
      ->fetchCol();
  }

}