<?php

use Agro_Utils_Bancos_BancoBrasil as BancoBrasil;
use Agro_Utils_Bancos_Banrisul as Banrisul;
use Agro_Utils_Bancos_Bradesco as Bradesco;
use Agro_Utils_Bancos_CaixaEconomicaFederal as CaixaEconomicaFederal;
use Agro_Utils_Bancos_Citibank as Citibank;
use Agro_Utils_Bancos_Hsbc as HSBC;
use Agro_Utils_Bancos_Itau as Itau;
use Agro_Utils_Bancos_Santander as Santander;

class Agro_Utils_Bancos_Factory
{
    public static function getBanco(string $codigoBanco, string $numeroAgencia = '', string $numeroConta = ''): ?Agro_Utils_Bancos_BaseBanco
    {
        switch ($codigoBanco) {
            case BancoBrasil::CODIGO:
                $instancia = new BancoBrasil($numeroAgencia, $numeroConta);
                break;

            case Banrisul::CODIGO:
                $instancia = new Banrisul($numeroAgencia, $numeroConta);
                break;

            case Bradesco::CODIGO:
                $instancia = new Bradesco($numeroAgencia, $numeroConta);
                break;

            case CaixaEconomicaFederal::CODIGO:
                $instancia = new CaixaEconomicaFederal($numeroAgencia, $numeroConta);
                break;

            /**
             * Inativo por inconsistências nas regras de validação do doc disponibilizado
             */
//            case Citibank::CODIGO:
//                $instancia = new Citibank($numeroAgencia, $numeroConta);
//                break;

            /**
             * Inativo por inconsistências nas regras de validação do doc disponibilizado
             */
//            case HSBC::CODIGO:
//                $instancia = new HSBC($numeroAgencia, $numeroConta);
//                break;

            case Itau::CODIGO:
                $instancia = new Itau($numeroAgencia, $numeroConta);
                break;

            case Santander::CODIGO:
                $instancia = new Santander($numeroAgencia, $numeroConta);
                break;

            default:
                $instancia = null;
                break;
        }

        return $instancia;
    }
}
