<?php declare(strict_types = 1);

namespace MailPoet\Listing;

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


class ListingDefinition {
  /** @var string|null */
  private $group;

  /** @var array */
  private $filters;

  /** @var string|null */
  private $search;

  /** @var array */
  private $parameters;

  /** @var string */
  private $sortBy;

  /** @var string */
  private $sortOrder;

  /** @var int */
  private $offset;

  /** @var int */
  private $limit;

  /** @var int[] */
  private $selection;

  public function __construct(
    ?string $group = null,
    array $filters = [],
    ?string $search = null,
    array $parameters = [],
    string $sortBy = 'created_at',
    string $sortOrder = 'desc',
    int $offset = 0,
    int $limit = 20,
    array $selection = []
  ) {
    $this->group = $group;
    $this->filters = $filters;
    $this->search = $search;
    $this->parameters = $parameters;
    $this->sortBy = $sortBy;
    $this->sortOrder = $sortOrder;
    $this->offset = $offset;
    $this->limit = $limit;
    $this->selection = array_map('intval', $selection);
  }

  /** @return string|null */
  public function getGroup() {
    return $this->group;
  }

  public function getFilters(): array {
    return $this->filters;
  }

  /** @return string|null */
  public function getSearch() {
    return $this->search;
  }

  public function getParameters(): array {
    return $this->parameters;
  }

  public function getSortBy(): string {
    return $this->sortBy;
  }

  public function getSortOrder(): string {
    return $this->sortOrder;
  }

  public function getOffset(): int {
    return $this->offset;
  }

  public function getLimit(): int {
    return $this->limit;
  }

  public function getSelection(): array {
    return $this->selection;
  }
}
