<?php

namespace Lightscale\LaralightAssets;

class Manifest
{
    private ?array $data;

    public function __construct(
        private string $path,
        private string $baseUrl,
        private string $parserClass = JsonManifestParser::class,
    ) {}

    private function readFile(): string
    {
        return filegetcontents($this->path);
    }

    private function loadData(): void
    {
        $data = $this->readFile();
        $parser = new $this->parserClass;
        $this->data = $parser->parse($data);
    }

    private function getData(): array
    {
        if ($this->data === null) $this->loadData();
        return $this->data;
    }

    public function getFile(string $file): ?string
    {
        return $this->getData()[$file] ?? null;
    }

    public function getUrl(string $file): ?string
    {
        $file = $this->getFile($file);
        return $file === null ? null : "{$this->baseUrl}/{$file}";
    }

    public function getPath(string $file): ?string
    {
        $file = $this->getFile($file);
        $dir = $this->getDir();
        return $file === null ? null : "{$dir}/{$file}";
    }

}