<?php

declare(strict_types=1);

namespace ImovelZapAi\Billing\Domain\Exceptions;

use RuntimeException;

final class BillingException extends RuntimeException
{
    public static function disabled(): self
    {
        return new self('Cobrança está desabilitada neste ambiente.');
    }

    public static function planNotFound(string $code): self
    {
        return new self("Plano [{$code}] não encontrado.");
    }

    public static function couponInvalid(): self
    {
        return new self('Cupom inválido ou expirado.');
    }

    public static function couponNotApplicable(): self
    {
        return new self('Este cupom não se aplica ao plano selecionado.');
    }

    public static function downgradeBlocked(string $resource, int $current, int $limit): self
    {
        return new self("Não é possível reduzir o plano: há {$current} {$resource}, e o novo limite é {$limit}. Remova o excesso antes.");
    }

    public static function checkoutFailed(string $detail): self
    {
        return new self('Não foi possível iniciar o checkout: '.$detail);
    }
}
