<?php

namespace DLSpatie\Ray\Support;

class CacheStore
{
    /** @var array */
    protected $store = [];

    /** @var Clock */
    protected $clock;

    public function __construct(Clock $clock)
    {
        $this->clock = $clock;
    }

    public function hit(): self
    {
        $this->store[] = $this->clock->now();

        return $this;
    }

    public function clear(): self
    {
        $this->store = [];

        return $this;
    }

    public function count(): int
    {
        return count($this->store);
    }

    public function countLastSecond(): int
    {
        $amount = 0;

        $lastSecond = $this->clock->now()->modify('-1 second');

        foreach ($this->store as $key => $item) {
            if ($this->isBetween(
                $item->getTimestamp(),
                $lastSecond->getTimestamp(),
                $this->clock->now()->getTimestamp()
            )
            ) {
                $amount++;
            }
        }

        return $amount;
    }

    protected function isBetween($toCheck, $start, $end): bool
    {
        return $toCheck >= $start && $toCheck <= $end;
    }
}
