<?php

namespace Lc\SovBundle\Repository\Reminder;

use Lc\SovBundle\Model\User\UserInterface;
use Lc\SovBundle\Repository\RepositoryQueryInterface;

interface ReminderStoreInterface
{
    public function createDefaultQuery(RepositoryQueryInterface $query = null): RepositoryQueryInterface;

    public function createQuery(RepositoryQueryInterface $query = null): RepositoryQueryInterface;

    public function getRepositoryQuery();

    public function getOneById(int $id);

    public function getOneBySlug(string $slug, bool $isOnline = true, $query = null);

    public function getOneByDevAlias(string $devAlias, $query = null);

    public function getOneOnlineByDevAlias(string $devAlias, $query = null);

    public function getOneByOldUrl(string $oldUrl, $query = null);

    public function getAll($query = null);

    public function getOnline($query = null);

    public function getParent(bool $isOnline = true, $query = null);

    public function orderByDefault(RepositoryQueryInterface $query): RepositoryQueryInterface;

    public function filtersDefault(RepositoryQueryInterface $query): RepositoryQueryInterface;

    public function relationsDefault(RepositoryQueryInterface $query): RepositoryQueryInterface;

    public function get($params = [], $query = null);

    public function getByUser(UserInterface $user, $query = null): array;

    public function getByEasyAdminConfigAndUser(
        string $crudAction,
        string $crudControllerFqcn,
        UserInterface $user,
        int $entityId = null,
        $query = null
    ): array;
}