<?php

use Agro_Utils_Bancos_BaseBanco as BaseBanco;
use Agro_Utils_Bancos_DigitoVerificadorInterface as DigitoVerificadorInterface;

class Agro_Utils_Bancos_Citibank extends BaseBanco implements DigitoVerificadorInterface
{
    const CODIGO = '745';

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

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

    /**
     * Citibank 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;
        $multiplicador = 11;
        $numeroAgenciaConta = str_split($this->numeroConta);

        foreach ($numeroAgenciaConta as $numero) {
            $calculo += $numero * $multiplicador;
            $multiplicador--;
        }

        $resto = $calculo % 11;

        return $resto > 1 ? 11 - $resto : '0';
    }

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