<?php declare(strict_types = 1);

namespace MailPoet\Automation\Engine;

if (!defined('ABSPATH')) exit;


use MailPoet\Automation\Engine\Data\Step;
use MailPoet\Automation\Engine\Data\Workflow;
use MailPoet\Automation\Engine\Data\WorkflowRunLog;

class Hooks {
  /** @var WordPress */
  private $wordPress;

  public function __construct(
    WordPress $wordPress
  ) {
    $this->wordPress = $wordPress;
  }

  public const INITIALIZE = 'mailpoet/automation/initialize';
  public const API_INITIALIZE = 'mailpoet/automation/api/initialize';
  public const STEP_RUNNER_INITIALIZE = 'mailpoet/automation/step_runner/initialize';
  public const TRIGGER = 'mailpoet/automation/trigger';
  public const WORKFLOW_STEP = 'mailpoet/automation/workflow/step';

  public const EDITOR_BEFORE_LOAD = 'mailpoet/automation/editor/before_load';

  public const WORKFLOW_BEFORE_SAVE = 'mailpoet/automation/workflow/before_save';
  public const WORKFLOW_STEP_BEFORE_SAVE = 'mailpoet/automation/workflow/step/before_save';

  public const WORKFLOW_RUN_LOG_AFTER_STEP_RUN = 'mailpoet/automation/workflow/step/after_run';

  public const WORKFLOW_TEMPLATES = 'mailpoet/automation/workflow/templates';

  public function doWorkflowBeforeSave(Workflow $workflow): void {
    $this->wordPress->doAction(self::WORKFLOW_BEFORE_SAVE, $workflow);
  }

  public function doWorkflowStepBeforeSave(Step $step): void {
    $this->wordPress->doAction(self::WORKFLOW_STEP_BEFORE_SAVE, $step);
  }

  public function doWorkflowStepByKeyBeforeSave(Step $step): void {
    $this->wordPress->doAction(self::WORKFLOW_STEP_BEFORE_SAVE . '/key=' . $step->getKey(), $step);
  }

  public function doWorkflowStepAfterRun(WorkflowRunLog $workflowRunLog): void {
    $this->wordPress->doAction(self::WORKFLOW_RUN_LOG_AFTER_STEP_RUN, $workflowRunLog);
  }
}
