<?php

use Agro_Utils_Bancos_BaseBanco as BaseBanco;
use Agro_Utils_Bancos_DigitoVerificadorInterface as DigitoVerificadorInterface;

class Agro_Utils_Bancos_Banrisul extends BaseBanco implements DigitoVerificadorInterface
{
    const CODIGO = '041';

    private int $primeiroDigito;
    private int $segundoDigito;

    public function __construct(string $numeroAgencia, string $numeroConta)
    {
        $this->totalCaracteresNumeroConta = 9;

        parent::__construct($numeroAgencia, $numeroConta);
    }

    /**
     * Banrisul não possui dígito verificador visível na agência, não sendo necessário cálculo
     * @return int|null
     */
    public function calcularDigitoVerificadorAgencia(): ?int
    {
        return null;
    }

    public function calcularDigitoVerificadorConta(): int
    {
        $calculo = 0;
        $multiplicadores = [2, 3, 4, 5, 6, 7, 4, 2, 3];
        $numeroContaConvertido = array_reverse(str_split($this->numeroConta));

        foreach ($numeroContaConvertido as $indice => $numero) {
            $calculo += $numero * $multiplicadores[$indice];
        }

        $resto = $calculo % 11;

        return $resto === 0 ? 0 : ($resto === 1 ? 6 : 11 - $resto);
    }

    /**
     * Sobrescrito o método, pois o Banrisul não possui dígito verificador na agência
     * @param string $digitoVerificador
     * @return bool
     */
    public function digitoVerificadorAgenciaValido(string $digitoVerificador = ''): bool
    {
        return true;
    }
}