import java.util.Date;
/**
 * A representation of the personal profiles of users.  This class allows
 * you to get and set a user's personal information, such as name,
 * birthdate, address, etc.
 *
 * @author Khong Lovan
*/
public interface PersonalProfileInterface {
    // +------------+----------------------------------------------------------
    // | Extractors |
    // +------------+

    /**
     * Get the user's name.
     * Pre: The value of the user's name has been initialized.
     * Post: Returns the user's name, which remains unchanged.
     */
    public Name getUserFullName();
    
    /**
     * Get the user's address.
     * Pre: The value of the user's address has been initialized.
     * Post: Returns the user's address, which remains unchanged.
     */
    public StreetAddress getAddress();    

    /**
     * Get the user's gender.
     * Pre: The value of the user's gender has been initialized.
     * Post: Returns the user's gender, which remains unchanged.
     */
    public String getGender();
    
    /**
     * Get the user's date of birth.
     * Pre: The value of the user's date of birth has been initialized.
     * Post: Returns the user's date of birth, which remains unchanged.
     */
    public Date getDateOfBirth();

    /**
     * Get the user's phone number.
     * Pre: The value of the user's phone number has been initialized.
     * Post: Returns the user's phone number, which remains unchanged.
     */
    public String getPhoneNumber();


    // +-----------+-----------------------------------------------------------
    // | Modifiers |
    // +-----------+

    /**
     * Set the user's name.
     * Pre: None.
     * Post: Changes the user's name according to the given parameter.
     */
    public void setUserFullName(Name userFullName);

    /**
     * Set the user's address.
     * Pre: None.
     * Post: Changes the user's address according to the given parameter.
     */
    public void setAddress(StreetAddress address);

    /**
     * Set the user's gender.
     * Pre: None.
     * Post: Changes the user's gender according to the given parameter.
     */
    public void setGender(String gender);

    /**
     * Set the user's date of birth.
     * Pre: None.
     * Post: Changes the user's date of birth according to the given parameter.
     */
    public void setDateOfBirth(Date birthDate);

    /**
     * Set the user's phone number.
     * Pre: None.
     * Post: Changes the user's phone number according to the given parameter.
     */
    public void setPhoneNumber(String phoneNumber);

    /**
     * Combines all informatin into one string.
     */
    public String toString();

} // interface PersonalProfile

