<?php

use Agro_Utils_Bancos_BaseBanco as BaseBanco;
use Agro_Utils_Bancos_DigitoVerificadorInterface as DigitoVerificadorInterface;

class Agro_Utils_Bancos_Bradesco extends BaseBanco implements DigitoVerificadorInterface
{
    const CODIGO = '237';

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

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

    public function calcularDigitoVerificadorAgencia(): string
    {
        $calculo = 0;
        $mutilplicador = 5;
        $numeroAgenciaConvertido = str_split($this->numeroAgencia);

        foreach ($numeroAgenciaConvertido as $numero) {
            $calculo += $numero * $mutilplicador;
            $mutilplicador--;
        }

        $calculo = 11 - ($calculo % 11);

        return $calculo === 10 ? 'P' : ($calculo === 11 ? '0' : $calculo);
    }

    public function calcularDigitoVerificadorConta(): string
    {
        $calculo = 0;
        $multiplicador = 2;
        $numeroContaConvertido = array_reverse(str_split($this->numeroConta));

        foreach ($numeroContaConvertido as $numero) {
            $calculo += $numero * $multiplicador;
            $multiplicador = $multiplicador === 7 ? 2 : $multiplicador + 1;
        }

        $resto = $calculo % 11;

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