
/**
 * Write a description of class Cliente here.
 * 
 * @author FMM 
 * @version (a version number or a date)
 */
import java.io.Serializable;
import java.util.*;
public class Cliente implements Serializable {
    
    // Variáveis de Instância
    private String codCliente = "";
    private String nomeCliente = "";
    private String moradaCliente = "";
    private String nifCliente = "";
    private String biCliente = "";
    private TreeSet<String> codSeguros = new TreeSet<String>();

   
    // Construtores
    public Cliente() { }
    public Cliente(String cc, String nm, String mora, String nif, String bi) {
        codCliente = cc; nomeCliente = nm; moradaCliente = mora;
        nifCliente = nif; biCliente = bi;
    }
    
    public Cliente(Cliente cli) {
        codCliente = cli.getCodCliente(); 
        nomeCliente = cli.getNomeCliente(); 
        moradaCliente = cli.getMoradaCliente();
        nifCliente = cli.getNifCliente(); 
        biCliente = cli.getBiCliente();
        codSeguros = (TreeSet<String>) cli.getCodSeguros();
    }
    
    // Métodos de Instância
    
    // gets
    
    public String getCodCliente() { return codCliente; }
    public String getNomeCliente() { return nomeCliente; } 
    public String getMoradaCliente() { return moradaCliente; }
    public String getNifCliente() { return nifCliente; }
    public String getBiCliente() { return biCliente; }
    public Set<String> getCodSeguros() {
        Set<String> aux = new TreeSet<String>();
        for(String cod : codSeguros) aux. add(cod);
        return aux;
    }
    
    // sets básicos
    public void setCodCliente(String cc) { codCliente = cc; }
    public void setNomeCliente(String nome) { nomeCliente = nome; }
    public void setMoraCliente(String mora) { moradaCliente = mora; }
    public void setNifCliente(String nif) { nifCliente = nif; }
    public void setBiCliente(String bi) { biCliente = bi; }
    
    // modificadores
    public void insNovoSeg(String codSeguro) { codSeguros.add(codSeguro); }
    public void removeCodSeguro(String codSeg) { codSeguros.remove(codSeg); }
    public int numSegsDoCliente() { return codSeguros.size(); }
    
    // consultas
    public boolean temEsteSeguro(String codSeguro) { return codSeguro.contains(codSeguro); }
    
    // outros
    
    public boolean equals(Object obj) {
      if(this == obj) return true; 
      if((obj == null) || (this.getClass() != obj.getClass())) return false;
      Cliente cli = (Cliente) obj;
      return codCliente.equals(cli.getCodCliente()) &&
             nomeCliente.equals(cli.getNomeCliente()); // versão simplicada  
    }
    
    public Cliente clone() { return new Cliente(this); }
    
    public String toString() {
        StringBuilder sb = new StringBuilder(" ---- Ficha de Cliente ----------------------------\n");
        sb.append("Codigo: " + codCliente + "\n");
        sb.append("Nome: " + nomeCliente + "\n");
        sb.append("Morada: " + codCliente + "\n");
        sb.append("NIF:" + nifCliente + "\n");
        sb.append("BI Nº:" + biCliente + "\n");
        sb.append("Numero de Seguros:" + codSeguros.size() + "\n");
        sb.append("-------------------------------------------------------------------------\n");
        return sb.toString();
    }
}
