<?php

namespace Psr\SimpleCache;

use DateInterval;

/**
 * @template EntryType
 */
interface CacheInterface
{
    /**
     * @param string $key
     * @param EntryType|null $default
     * @return EntryType|null
     */
    public function get(string $key, $default = null);

    /**
     * @param string $key
     * @param EntryType $value
     * @param null|int|DateInterval $ttl
     */
    public function set(string $key, $value, null|int|DateInterval $ttl = null): bool;

    /**
     * @param iterable<string> $keys
     * @param EntryType $default
     * @return iterable<string, EntryType|null>
     */
    public function getMultiple(iterable $keys, $default = null): iterable;

    /**
     * @param iterable<string, EntryType> $values
     * @param null|int|DateInterval $ttl
     */
    public function setMultiple(iterable $values, null|int|DateInterval $ttl = null): bool;

    /**
     * @param iterable<string> $keys
     */
    public function deleteMultiple(iterable $keys): bool;
}
