<?php

class Agro_Utils_Bancos_BaseBanco
{
    protected string $numeroAgencia;
    protected string $numeroConta;
    protected int $totalCaracteresNumeroAgencia = 4;
    protected int $totalCaracteresNumeroConta = 8;

    public function __construct(string $numeroAgencia, string $numeroConta)
    {
        $this->numeroAgencia = str_pad($numeroAgencia, $this->totalCaracteresNumeroAgencia, '0', STR_PAD_LEFT);
        $this->numeroConta = str_pad($numeroConta, $this->totalCaracteresNumeroConta, '0', STR_PAD_LEFT);

        if (!empty($this->numeroAgencia) && !$this->tamanhoNumeroAgenciaCorreto()) {
            throw new Exception("Tamanho do número da agência incorreto (Número de caracteres: {$this->totalCaracteresNumeroAgencia}).");
        }
    }

    public function digitoVerificadorAgenciaValido(string $digitoVerificador) : bool
    {
        $digitoVerificadorCalculado = $this->calcularDigitoVerificadorAgencia();

        return empty($digitoVerificador) || $digitoVerificadorCalculado == $digitoVerificador;
    }

    public function digitoVerificadorContaValido(string $digitoVerificador) : bool
    {
        $digitoVerificadorCalculado = $this->calcularDigitoVerificadorConta();

        return $digitoVerificadorCalculado == $digitoVerificador;
    }

    protected function tamanhoNumeroAgenciaCorreto() : bool
    {
        return strlen($this->numeroAgencia) === $this->totalCaracteresNumeroAgencia;
    }

    protected function tamanhoNumeroContaCorreto() : bool
    {
        return strlen($this->numeroConta) === $this->totalCaracteresNumeroConta;
    }
}
