<?php

use Agro_Utils_Bancos_BaseBanco as BaseBanco;
use Agro_Utils_Bancos_DigitoVerificadorInterface as DigitoVerificadorInterface;

class Agro_Utils_Bancos_CaixaEconomicaFederal extends BaseBanco implements DigitoVerificadorInterface
{
    const CODIGO = '104';

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

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

    /**
     * Caixa 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
    {
        $numeroAgenciaConta = str_split("{$this->numeroAgencia}{$this->numeroConta}");
        $multiplicadores = [8, 7, 6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
        $calculo = 0;

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

        $calculo = $calculo * 10;
        $resultado = abs((((int)($calculo / 11)) * 11) - $calculo);

        return $resultado === 10 ? 0 : $resultado;
    }

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