<?php

/**
 * @file
 * Install, update and uninstall functions for the Honeypot module.
 */

use Drupal\Core\Url;

/**
 * Implements hook_schema().
 */
function honeypot_schema() {
  $schema['honeypot_user'] = [
    'description' => 'Table that stores failed attempts to submit a form.',
    'fields' => [
      'uid' => [
        'description' => 'Foreign key to {users}.uid; uniquely identifies a Drupal user to whom this ACL data applies.',
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
      ],
      'hostname' => [
        'type' => 'varchar',
        'length' => 128,
        'not null' => TRUE,
        'description' => 'Hostname of user that that triggered honeypot.',
      ],
      'timestamp' => [
        'description' => 'Date/time when the form submission failed, as Unix timestamp.',
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
      ],
    ],
    'indexes' => [
      'uid' => ['uid'],
      'timestamp' => ['timestamp'],
    ],
  ];
  return $schema;
}

/**
 * Implements hook_install().
 */
function honeypot_install() {
  if (PHP_SAPI !== 'cli') {
    // Rebuild so that routes defined in honeypot.routing.yml become available.
    \Drupal::service("router.builder")->rebuild();
    // Prompt the user to configure Honeypot.
    \Drupal::messenger()->addMessage(t('Honeypot installed successfully. Please <a href=":url">configure Honeypot</a> to protect your forms from spam bots.', [
      ':url' => Url::fromRoute('honeypot.config')->toString(),
    ]));
  }
}

/**
 * Implements hook_uninstall().
 */
function honeypot_uninstall() {
  // Clear the bootstrap cache.
  \Drupal::cache('bootstrap')->deleteAll();
  \Drupal::configFactory()->getEditable('honeypot.settings.yml')->delete();
}

/**
 * Adds the 'hostname' column to the {honeypot_user} table.
 */
function honeypot_update_8100() {
  $schema = honeypot_schema();
  $spec = $schema['honeypot_user']['fields']['hostname'];
  $spec['initial'] = '';
  \Drupal::database()->schema()->addField('honeypot_user', 'hostname', $spec);
}