<?php

namespace Drupal\layout_builder;

/**
 * Provides an interface for loading layouts from tempstore.
 *
 * @internal
 *   Layout Builder is currently experimental and should only be leveraged by
 *   experimental modules and development releases of contributed modules.
 *   See https://www.drupal.org/core/experimental for more information.
 */
interface LayoutTempstoreRepositoryInterface {

  /**
   * Gets the tempstore version of a section storage, if it exists.
   *
   * @param \Drupal\layout_builder\SectionStorageInterface $section_storage
   *   The section storage to check for in tempstore.
   *
   * @return \Drupal\layout_builder\SectionStorageInterface
   *   Either the version of this section storage from tempstore, or the passed
   *   section storage if none exists.
   *
   * @throw \UnexpectedValueException
   *   Thrown if a value exists, but is not a section storage.
   */
  public function get(SectionStorageInterface $section_storage);

  /**
   * Stores this section storage in tempstore.
   *
   * @param \Drupal\layout_builder\SectionStorageInterface $section_storage
   *   The section storage to set in tempstore.
   */
  public function set(SectionStorageInterface $section_storage);

  /**
   * Removes the tempstore version of a section storage.
   *
   * @param \Drupal\layout_builder\SectionStorageInterface $section_storage
   *   The section storage to remove from tempstore.
   */
  public function delete(SectionStorageInterface $section_storage);

}
