<?php

use Agro_Utils_Bancos_BaseBanco as BaseBanco;
use Agro_Utils_Bancos_DigitoVerificadorInterface as DigitoVerificadorInterface;

class Agro_Utils_Bancos_Itau extends BaseBanco implements DigitoVerificadorInterface
{
    const CODIGO = '341';

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

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

    /**
     * Itau não possui dígito verificador 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;
        $numeroAgenciaConta = str_split("{$this->numeroAgencia}{$this->numeroConta}");

        foreach ($numeroAgenciaConta as $indice => $numero) {
            $multiplicador = $indice % 2 === 0 ? 2 : 1;
            $resultado = $numero * $multiplicador;

            if (strlen($resultado) > 1) {
                $resultado = array_sum(str_split($resultado));
            }

            $calculo += $resultado;
        }

        $resto = $calculo % 10;

        return $resto === 0 ? 0 : 10 - $resto;
    }

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