<?php

namespace App\Rules;

use Illuminate\Contracts\Validation\InvokableRule;
use Illuminate\Support\Str;

class MaxMultiLine implements InvokableRule
{
    private $maxCharacters;

    public function __construct($maxCharacters)
    {
        $this->maxCharacters = $maxCharacters;
    }

    /**
     * Run the validation rule.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @param  \Closure(string): \Illuminate\Translation\PotentiallyTranslatedString  $fail
     * @return void
     */
    public function __invoke($attribute, $value, $fail)
    {
        $realCount = Str::length($value) - Str::substrCount($value, "\r\n");

        if ($realCount > $this->maxCharacters) {
            $fail('validation.max.string')->translate(['max' => $this->maxCharacters]);
        }
    }
}
