<?php

declare(strict_types=1);

namespace App\Framework\Vite\Exceptions;

use App\Framework\Exception\ErrorCode;
use App\Framework\Exception\FrameworkException;

/**
 * Exception thrown when Vite manifest operations fail
 */
final class ViteManifestException extends FrameworkException
{
    public static function fileNotFound(string $path): self
    {
        return self::create(
            ErrorCode::CONFIG_FILE_NOT_FOUND,
            "Vite manifest file not found: {$path}"
        )->withData([
            'manifest_path' => $path,
            'suggestion' => 'Run "npm run build" to generate the manifest file'
        ]);
    }

    public static function cannotRead(string $path): self
    {
        return self::create(
            ErrorCode::CONFIG_FILE_INVALID,
            "Cannot read Vite manifest file: {$path}"
        )->withData([
            'manifest_path' => $path
        ]);
    }

    public static function invalidJson(string $path, string $error): self
    {
        return self::create(
            ErrorCode::CONFIG_FILE_INVALID,
            "Invalid JSON in Vite manifest file: {$path}"
        )->withData([
            'manifest_path' => $path,
            'json_error' => $error
        ]);
    }

    public static function entryNotFound(string $entryName): self
    {
        return self::create(
            ErrorCode::ENTITY_NOT_FOUND,
            "Vite entry point not found in manifest: {$entryName}"
        )->withData([
            'entry_name' => $entryName,
            'suggestion' => 'Check that the entry point is defined in vite.config.js'
        ]);
    }
}
