package com.ahuntsic.tp2;

/**
 * Employe.java
 * hérite de la classe Personne; permet de configurer l'adresse,
 * l'historique des fonctions (5) et des salaires (10) et son numéro
 * d'assurance sociale.
 * Date: 07/10/2005
 * Pour: Mr. Mohammed Salah Bendelloul
 * Projet: Travail pratique #2
 *
 * @author Hassen Ben Tanfous
 */

//imports
import com.ahuntsic.outils.*;
import java.io.Serializable;

public class Employe extends Personne {

    //critères de validation
    /** critères de validation pour l'assurance sociale */
    public static final int ASSURANCE_SOCIALE_TAILLE = 6;

    //historique
    /** nombre de fonctions par défaut */
    public static final int HISTORIQUE_FONCTIONS_TAILLE = 5;

    /** nombre de salaires par défaut */
    public static final int HISTORIQUE_SALAIRES_TAILLE = 10;

    private String assuranceSociale;

    //l'adresse de l'employé
    private Adresse adresse;

    //historique des fonctions
    private Fonction[] tabFonctions;

    //historique des salaires
    private Salaire[] tabSalaires;

    private int nbFonctions,
            nbSalaires;

    /**
     * configure un Employe d'après les paramètres
     * @param assuranceSociale String
     * @param nom String
     * @param prenom String
     * @param sexe int
     * @param naissance MaDate
     * @param adresse Adresse
     */
    public Employe(String assuranceSociale, String nom, String prenom, int sexe,
                   MaDate naissance, Adresse adresse) {
        super(nom, prenom, sexe, naissance);

        valider(assuranceSociale);

        this.adresse = adresse;
        nbFonctions = 0; //nombre de fonctions affectées
        nbSalaires = 0; //nombre de salaire affectés
        tabFonctions = new Fonction[HISTORIQUE_FONCTIONS_TAILLE];
        tabSalaires = new Salaire[HISTORIQUE_SALAIRES_TAILLE];
    }

    /**
     * valide les attributs d'après les critères de validation
     * @param assuranceSociale String
     */
    private void valider(String assuranceSociale) {
        if (assuranceSociale.length() > ASSURANCE_SOCIALE_TAILLE) {
            assuranceSociale = assuranceSociale.substring(0,
                    ASSURANCE_SOCIALE_TAILLE);
        }
        this.assuranceSociale = assuranceSociale;
    }

    /**
     * ajoute une fonction à l'historique des fonctions
     * @param fonction Fonction
     */
    public void ajouterFonction(Fonction fonction) {
        if (nbFonctions < HISTORIQUE_FONCTIONS_TAILLE) {
            tabFonctions[nbFonctions] = fonction;
            nbFonctions++;
        }
    }

    /**
     * ajoute un salaire à l'historique des salaires
     * @param salaire Salaire
     */
    public void ajouterSalaire(Salaire salaire) {
        if (nbSalaires < HISTORIQUE_SALAIRES_TAILLE) {
            tabSalaires[nbSalaires] = salaire;
            nbSalaires++;
        }
    }

    public String getAssuranceSociale() {
        return assuranceSociale;
    }

    public Adresse getAdresse() {
        return adresse;
    }

    public int getNbFonctions() {
        return nbFonctions;
    }

    public int getNbSalaires() {
        return nbSalaires;
    }

    /**
     * retourne une Fonction d'après la position passée en paramètre
     * @param posi int
     * @return Fonction
     */
    public Fonction getFonction(int posi) {
        return (tabFonctions[posi - 1]);
    }

    /**
     * retourne un Salaire d'après la position passée en paramètre
     * @param posi int
     * @return Salaire
     */
    public Salaire getSalaire(int posi) {
        return (tabSalaires[posi - 1]);
    }


} //Fin de la classe Employe
