<?php

namespace Xentral\Widgets\SuperSearch\Query;

use Xentral\Widgets\SuperSearch\Exception\InvalidArgumentException;

final class SearchQuery
{
    /** @var string $searchTerm */
    private $searchTerm;

    /** @var array $searchWords */
    private $searchWords = null;

    /**
     * @param string $searchTerm
     *
     * @throws InvalidArgumentException
     */
    public function __construct($searchTerm)
    {
        if (empty($searchTerm)) {
            throw new InvalidArgumentException('Parameter "searchTerm" is empty.');
        }

        $this->searchTerm = trim($searchTerm);
    }

    /**
     * @return string
     */
    public function getSearchTerm()
    {
        return $this->searchTerm;
    }

    /**
     * @return array
     */
    public function getSearchWords()
    {
        if ($this->searchWords === null) {
            $this->searchWords = (array)preg_split('/([\s]+)/um', $this->searchTerm, -1, PREG_SPLIT_NO_EMPTY);
        }

        return $this->searchWords;
    }
}