<?php

declare(strict_types=1);

namespace App\Framework\Process\Exceptions;

use App\Framework\Core\ValueObjects\Duration;
use App\Framework\Exception\ErrorCode;
use App\Framework\Exception\FrameworkException;
use App\Framework\Process\ValueObjects\Command;

/**
 * Exception für Prozess-Timeout-Fehler.
 */
final class ProcessTimeoutException extends FrameworkException
{
    /**
     * Erstellt eine Exception, wenn ein Prozess-Timeout überschritten wird.
     */
    public static function exceeded(Command $command, Duration $timeout): self
    {
        return self::create(
            ErrorCode::TEMP_FAIL,
            "Process timeout exceeded: {$command->toString()} (timeout: {$timeout->toHumanReadable()})"
        )->withData([
            'command' => $command->toString(),
            'timeout_seconds' => $timeout->toSeconds(),
            'timeout_human' => $timeout->toHumanReadable(),
        ])->withRetryAfter((int) ceil($timeout->toSeconds()));
    }
}
