<?php

use Agro_Utils_Bancos_BaseBanco as BaseBanco;
use Agro_Utils_Bancos_DigitoVerificadorInterface as DigitoVerificadorInterface;

class Agro_Utils_Bancos_Hsbc extends BaseBanco implements DigitoVerificadorInterface
{
    const CODIGO = '399';

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

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

    /**
     * HSBC 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 = 9;
        $numeroAgenciaConta = array_reverse(str_split("{$this->numeroAgencia}{$this->numeroConta}"));

        foreach ($numeroAgenciaConta as $numero) {
            $calculo += $numero * $multiplicador;
            $multiplicador = $multiplicador === 2 ? 9 : $multiplicador - 1;
        }

        $resto = $calculo % 11;

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

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