
/**
 * Abstract class Seguro - write a description of the class here
 * 
 * @author FMM
 * @version (version number or date here)
 */
import java.util.*;
import java.io.Serializable;
public abstract class Seguro implements Serializable {
    
    // Variáveis de Instância
    private String codSeguro = "";
    private String codTitular = "";  // é o código do Cliente que é o titular
    private double precoBase = 0.0;
    private double taxaActiv = 0.0;   // 
    private int numActivEsteAno = 0;    // quando o titular paga anuidade este valor vai a 0 !
    private double taxaBonus = 0.0; // 
    private GregorianCalendar dataInicio = null;
    private int numAnos;      
    
    // Construtores
    public Seguro() { }
    public Seguro(String codSeg, String codTit, double preco, double txOc,
                  int numOc, double premZeroOc, GregorianCalendar inicio, int anosAnt) {
      codSeguro = codSeg; codTitular = codTit;  
      precoBase = preco;
      taxaActiv = txOc;  numActivEsteAno = numOc;    
      taxaBonus = premZeroOc; dataInicio = (GregorianCalendar) inicio.clone();
      numAnos = anosAnt; 
    }
    
    // gets
    public String getCodSeguro() { return codSeguro; }
    public String getCodTitular() { return codTitular; }
    public double getPrecoBase() { return precoBase; }
    public double getTaxaActiv() { return taxaActiv; }
    public int getNumActivEsteAno() { return numActivEsteAno; }
    public double getTaxaBonus() { return taxaBonus; }
    public GregorianCalendar getDataInicio() { return (GregorianCalendar) dataInicio.clone(); }
    public int getNumAnos() { return numAnos; }
    
    // outros
    public boolean equals(Object obj) {
      if(this == obj) return true; 
      if((obj == null) || (this.getClass() != obj.getClass())) return false;
      Seguro seg = (Seguro) obj;
      return codSeguro.equals(seg.getCodSeguro()) &&
             codTitular.equals(seg.getCodTitular()) &&
             dataInicio.equals(seg.getDataInicio());
    }
     
    public String toString() { return ""; }
    
    public abstract Seguro clone();
    public abstract double calculaPagamento();
    public abstract String emiteFactura();
    public abstract void registaPagamento();
    public abstract Set<Clausula> todasAsClausulasPagas();
    
    
}
