package org.springframework.prospring.ticket.domain;

/**
 * Reprezentuje zarejestrowanego użytkownika aplikacji.
 */
public class RegisteredUser {

    // identyfikator użytkownika.
    private long id;

    // adres poczty elektronicznej użytkownika.
    private String email;

    // hasło użytkownika.
    private String password;

    // adres do rozliczeń finansowych z użytkownikiem.
    private Address billingAddress;

    // adres wysyłki dla tego użytkownika.
    private Address deliveryAddress;

    /**
     * Pusty konstruktor wymagany przez specyfikację javabean.
     */
    public RegisteredUser() {
    }

    /**
     * Konstruktor - tworzy nowego zarejestroanego użytkownika o podanym adresie poczty elektronicznej,
     * haśle oraz adresie do rozliczeń. Domyślny adres wysyłki będzie taki sam jak adres do rozliczeń.
     * @param email Adres poczty elektronicznej użytkownika.
     * @param password Hasł użytkownika.
     * @param billingAddress Adres do rozliczeń (oraz wysyłki) z tym użytkownikiem.
     */
    public RegisteredUser(String email, String password, Address billingAddress) {
        this(email, password, billingAddress, billingAddress);
    }

    /**
     * Konstruktor - tworzy nowego zarejestroanego użytkownika o podanym adresie poczty elektronicznej,
     * haśle, adresie do rozliczeń oraz adresie wysyłki.
     * @param email Adres poczty elektronicznej użytkownika.
     * @param password Hasł użytkownika.
     * @param billingAddress Adres do rozliczeń z tym użytkownikiem.
     * @param deliveryAddress Adres wysyłki dla tego użytkownika.
     */
    public RegisteredUser(String email, String password, Address billingAddress, Address deliveryAddress) {
        this.email = email;
        this.password = password;
        this.billingAddress = billingAddress;
        this.deliveryAddress = deliveryAddress;
    }

    /**
     * Zwraca identyfikator użytkownika.
     * @return Identyfikator użytkownika.
     */
    public long getId() {
        return id;
    }

    /**
     * Ustawia identyfikator użytkownika.
     * @param id Identyfikator użytkownika.
     */
    public void setId(long id) {
        this.id = id;
    }

    /**
     * Zwraca adres poczty elektronicznej użytkownika.
     * @return Adres poczty elektronicznej użytkownika.
     */
    public String getEmail() {
        return email;
    }

    /**
     * Ustawia adres poczty elektronicznej użytkownika.
     * @param email Adres poczty elektronicznej użytkownika.
     */
    public void setEmail(String email) {
        this.email = email;
    }

    /**
     * Zwraca hasło użytkownika.
     * @return Hasło użytkownika.
     */
    public String getPassword() {
        return password;
    }

    /**
     * Ustawia hasło użytkownika.
     * @param password Hasło użytkownika.
     */
    public void setPassword(String password) {
        this.password = password;
    }

    /**
     * Zwraca adres do rozliczeń z tym użytkownikem.
     * @return Adres do rozliczeń.
     */
    public Address getBillingAddress() {
        return billingAddress;
    }

    /**
     * Ustawia adres do rozliczeń z tym użytkownikiem.
     * @param billingAddress Adres do rozliczeń z tym użytkownikiem.
     */
    public void setBillingAddress(Address billingAddress) {
        this.billingAddress = billingAddress;
    }

    /**
     * Zwraca adres wysyłki dla tego użytkownika.
     * @return Adres wysyłki.
     */
    public Address getDeliveryAddress() {
        return deliveryAddress;
    }

    /**
     * Ustawia adres wysyłki dla tego użytkownika.
     * @param deliveryAddress Adres wysyłki do tego użytkownika.
     */
    public void setDeliveryAddress(Address deliveryAddress) {
        this.deliveryAddress = deliveryAddress;
    }

}
