<?php
declare(strict_types=1);

namespace PpPhp\Core\Platform\Workflow\Timer;

final class WorkflowTimerStore
{
    public const CACHE_DIR = 'storage/cache/workflow';
    public const STATE_FILE = 'workflow-timer-runtime.json';

    public function __construct(private readonly string $basePath, private readonly WorkflowTimerSerializer $serializer = new WorkflowTimerSerializer()) {}

    public function stateFile(): string
    {
        return rtrim($this->basePath, DIRECTORY_SEPARATOR) . '/' . self::CACHE_DIR . '/' . self::STATE_FILE;
    }

    public function save(WorkflowTimerSnapshot $snapshot): WorkflowTimerSnapshot
    {
        $file = $this->stateFile();
        if (!is_dir(dirname($file))) { mkdir(dirname($file), 0775, true); }
        file_put_contents($file, $this->serializer->encode($snapshot));
        return $snapshot;
    }

    public function load(): WorkflowTimerSnapshot
    {
        $file = $this->stateFile();
        if (!is_file($file)) { return new WorkflowTimerSnapshot(); }
        return $this->serializer->decode((string) file_get_contents($file));
    }

    public function reset(): void
    {
        $file = $this->stateFile();
        if (is_file($file)) { unlink($file); }
    }

    public function exists(): bool { return is_file($this->stateFile()); }
}
