<?php

declare(strict_types=1);

/*
 * SearchTermParseEvent:
 * Signal that a search term needs parsing
 */
class SearchTermParseEvent extends Event
{
    public int $id = 0;
    public ?string $term = null;
    /** @var string[] */
    public array $context = [];
    /** @var Querylet[] */
    public array $querylets = [];
    public ?string $order = null;

    public function __construct(int $id, string $term=null, array $context=[])
    {
        parent::__construct();
        $this->id = $id;
        $this->term = $term;
        $this->context = $context;
    }

    public function add_querylet(Querylet $q)
    {
        $this->querylets[] = $q;
    }
}

class SearchTermParseException extends SCoreException
{
}

class PostListBuildingEvent extends Event
{
    public array $search_terms = [];
    public array $parts = [];

    /**
     * #param string[] $search
     */
    public function __construct(array $search)
    {
        parent::__construct();
        $this->search_terms = $search;
    }

    public function add_control(string $html, int $position=50)
    {
        while (isset($this->parts[$position])) {
            $position++;
        }
        $this->parts[$position] = $html;
    }
}