package aulas.aula9;

import aulas.aula6.*;
import aulas.aula9.bancoar.Arvore;

class Banco implements QQBanco {
  private int		indice = 0;
  private Conta[]	contas;

  public void cadastro(Conta c) {
    contas[indice] = c;
    indice = indice + 1;
  }  

  protected Conta procura(long num) {
// Variáveis locais ao método.
    int		i = 0;
    boolean	achou = false;
    
    while ((! achou) & (i < indice)) {
      if (contas[i].num_conta() == num) achou = true;
      else i = i + 1;
    }
    if (achou == true) return contas[i];
    else return null;
// return tem que ser a ultima instrucao!
  }

  public void print_saldo(long num) {
    Conta	c;

    c = procura(num); 
    if (c == null) System.out.println("A conta " + num + " nao existe!");
    else c.print_saldo();
  }

  public void debito(long num, double val) {
    Conta	c;

    c = this.procura(num); 
    if (c == null) System.out.println("A conta " + num + " nao existe!");
    else c.debito(val);    
  }

  public void transfere(long num_de, long num_para, double val) {
    Conta	c_de, c_para;

    c_de = this.procura(num_de);
    c_para = this.procura(num_para); 
    if ((c_de == null) | (c_para == null)) System.out.println("Um das contas não existe!");
    else {c_de.debito(val);
          c_para.credito(val);
         }
  }

  public Banco () {
    contas = new Conta[50];
    indice = 0;
  }

  public double saldo_total() {
    int 	i;
    double	st;
 
    st = 0;
    for (i = 0; i < indice; i = i + 1) { 
      st = st + contas[i].saldo_conta();
    }
    return st;
  }

  public int num_clientes() {
    return indice;
  }
}

// ----------------------------------------------------------

class BancoAr implements QQBanco {
  private Arvore	contas = new Arvore();

  public void cadastro(Conta c) {
    if (c.saldo_conta() > 100)
      contas.insere(c);
    else System.out.println("Saldo insuficiente!");
/* 
   Conta so e cadastrada se nao existe uma com 
   mesmo numero e o saldo e maior que 100 reais.
*/
  }  

  public void debito(long num, double val) {
    Conta	c;

    c = contas.busca(num); 
    if (c == null) System.out.println("A conta " + num + " nao existe!");
    else c.debito(val);    
  }

  public double saldo_total() { 
    return contas.soma();
  }

  public int num_clientes() {
    return contas.num_elementos();
  }
}

