<?php

declare(strict_types=1);

namespace ImovelZapAi\Signatures\Domain\Exceptions;

use RuntimeException;

class SignatureException extends RuntimeException
{
    public static function invalidState(string $detail): self
    {
        return new self("Operação inválida na assinatura: {$detail}");
    }

    public static function tokenInvalid(): self
    {
        return new self('Link de assinatura inválido ou expirado.');
    }

    public static function notFound(): self
    {
        return new self('Solicitação de assinatura não encontrada.');
    }

    public static function providerUnavailable(?string $detail = null): self
    {
        return new self($detail ?? 'Provedor de assinatura indisponível ou não configurado.');
    }

    public static function otpInvalid(): self
    {
        return new self('Código de verificação inválido ou expirado.');
    }
}
