<?php
/**
 * @author Robin von den Bergen <robin.vondenbergen@interlutions.de>
 */

namespace CodeFareith\CfGoogleAuthenticator\Application\Exception;

use LengthException;
use Throwable;
use function time;
use function vsprintf;

class StringLengthViolation extends LengthException implements ApplicationException
{
    public static function limitExceeded(int $limit, int $actual, Throwable $previous = null): self
    {
        $message = vsprintf(
            'The given string is too long. Permitted: %s characters. Actual: %s characters.',
            [
                $limit,
                $actual,
            ]
        );

        return new self($message, time(), $previous);
    }

    public static function limitUndershot(int $limit, int $actual, Throwable $previous = null): self
    {
        $message = vsprintf(
            'The given string is too short. Permitted: %s characters. Actual: %s characters.',
            [
                $limit,
                $actual,
            ]
        );

        return new self($message, time(), $previous);
    }

    public static function requirementNotMet(int $required, int $actual, Throwable $previous = null): self
    {
        $message = vsprintf(
            'The given string must consist of exactly %s characters. Actual: %s characters.',
            [
                $required,
                $actual,
            ]
        );

        return new self($message, time(), $previous);
    }
}