package org.aegee.runanddine.feedback;

import org.aegee.runanddine.util.model.Model;

/**
 * Model for persistent Feedbacks
 * @author s_wolff
 */
public final class Feedback extends Model {

    /**
     * Manager for Feedbacks
     */
    public static final FeedbackManager OBJECTS = FeedbackManager.getInstance();
    private static final long serialVersionUID = 1L;
    
    /**
     * Model fields
     */
    private String additionalFeedback, otherAdv, otherWish;
    private boolean advMail, advCanteen, advFacebook, advFriends;
    private boolean advMailWish, advCanteenWish, advFacebookWish, advFriendsWish;
    private boolean radMailFlag, aegeeMailFlag;
    private int runAndDineId, pointsRaD, pointsMotto;

    /**
     * Set ID of RunAndDine the feedback is related to
     * @param runAndDineId ID of RunAndDine the feedback is related to
     */
    public void setRunAndDineId(int runAndDineId) {
        this.runAndDineId = runAndDineId;
    }

    /**
     * Get ID of RunAndDine the feedback is related to
     * @return ID of RunAndDine the feedback is related to
     */
    public int getRunAndDineId() {
        return runAndDineId;
    }

    /**
     * Default constructor
     */
    public Feedback() {
    }

    /**
     * Create feedback setting all fields
     * @param additionalFeedback Additional feedback as test
     * @param otherAdv
     * @param otherWish
     * @param advMail
     * @param advCanteen
     * @param advFacebook
     * @param advFriends
     * @param advMailWish
     * @param advCanteenWish
     * @param advFacebookWish
     * @param advFriendsWish
     * @param radMailFlag
     * @param aegeeMailFlag
     * @param runAndDineId
     * @param pointsRaD
     * @param pointsMotto
     */
    public Feedback(String additionalFeedback, String otherAdv, String otherWish, boolean advMail, boolean advCanteen, boolean advFacebook, boolean advFriends, boolean advMailWish, boolean advCanteenWish, boolean advFacebookWish, boolean advFriendsWish, boolean radMailFlag, boolean aegeeMailFlag, int runAndDineId, int pointsRaD, int pointsMotto) {
        this.additionalFeedback = additionalFeedback;
        this.otherAdv = otherAdv;
        this.otherWish = otherWish;
        this.advMail = advMail;
        this.advCanteen = advCanteen;
        this.advFacebook = advFacebook;
        this.advFriends = advFriends;
        this.advMailWish = advMailWish;
        this.advCanteenWish = advCanteenWish;
        this.advFacebookWish = advFacebookWish;
        this.advFriendsWish = advFriendsWish;
        this.radMailFlag = radMailFlag;
        this.aegeeMailFlag = aegeeMailFlag;
        this.runAndDineId = runAndDineId;
        this.pointsRaD = pointsRaD;
        this.pointsMotto = pointsMotto;
    }

    /**
     * Set rating for RunAndDine
     * @param p Points for RunAndDine
     */
    public void setPointsRaD(int p) {
        this.pointsRaD = p;
    }

    /**
     * Get rating for RunAndDine
     * @return Points for RunAndDine
     */
    public int getPointsRaD() {
        return pointsRaD;
    }

    /**
     * Set rating for motto
     * @param p Points for motto
     */
    public void setPointsMotto(int p) {
        this.pointsMotto = p;
    }

    /**
     * Get rating for motto
     * @return Points for motto
     */
    public int getPointsMotto() {
        return pointsMotto;
    }

    /**
     * Set additional text as feedback
     * @param add Additional feedback
     */
    public void setAdditionalFeedback(String add) {
        this.additionalFeedback = add;
    }

    /**
     * Get additional text from feedback
     * @return Additional feedback
     */
    public String getAdditionalFeedback() {
        return additionalFeedback;
    }

    /**
     * Check whether participant got advertised via mail
     * @return Participant got advertised via mail
     */
    public boolean getAdvMail() {
        return advMail;
    }

    /**
     * Set whether participant got advertised via mail
     * @param mail Participant got advertised via mail
     */
    public void setAdvMail(boolean mail) {
        this.advMail = mail;
    }

    /**
     * Check whether participant got advertised via canteen
     * @return Participant got advertised via canteen
     */
    public boolean getAdvCanteen() {
        return advCanteen;
    }

    /**
     * Set whether participant got advertised via canteen
     * @param canteen Participant got advertised via canteen
     */
    public void setAdvCanteen(boolean canteen) {
        this.advCanteen = canteen;
    }

    /**
     * Check whether participant got advertised via facebook
     * @return Participant got advertised via facebook
     */
    public boolean getAdvFacebook() {
        return advFacebook;
    }

    /**
     * Set whether participant got advertised via facebook
     * @param fb 
     */
    public void setAdvFacebook(boolean fb) {
        this.advFacebook = fb;
    }

    /**
     * Check whether participant got advertised via friends
     * @return Participant got advertised via friends
     */
    public boolean getAdvFriends() {
        return advFriends;
    }

    /**
     * Set whether participant got advertised via friends
     * @param friends Participant got advertised via friends
     */
    public void setAdvFriends(boolean friends) {
        this.advFriends = friends;
    }

    /**
     * Check whether participant got advertised via other channel
     * @return Participant got advertised via other channel
     */
    public String getOtherAdv() {
        return otherAdv;
    }

    /**
     * Set whether participant got advertised via other channel
     * @param other Participant got advertised via other channel
     */
    public void setOtherAdv(String other) {
        this.otherAdv = other;
    }

    /**
     * Check whether participant wants to get advertis
     * @return 
     */
    public boolean getAdvMailWish() {
        return advMailWish;
    }

    /**
     * Set whether participant wants more advertisement via mail
     * @param mail Participant wants more advertisement via mail
     */
    public void setAdvMailWish(boolean mail) {
        this.advMailWish = mail;
    }

    /**
     * Check whether participant wants more advertisement via canteen
     * @return Participant wants more advertisement via canteen
     */
    public boolean getAdvCanteenWish() {
        return advCanteenWish;
    }

    /**
     * Set whether participant wants more advertisement via canteen
     * @param canteen Participant wants more advertisement via canteen
     */
    public void setAdvCanteenWish(boolean canteen) {
        this.advCanteenWish = canteen;
    }

    /**
     * Check whether participant wants more advertisement via facebook
     * @return Participant wants more advertisement via facebook
     */
    public boolean getAdvFacebookWish() {
        return advFacebookWish;
    }

    /**
     * Set whether participant wants more advertisement via facebook
     * @param fb Participant wants more advertisement via facebook
     */
    public void setAdvFacebookWish(boolean fb) {
        this.advFacebookWish = fb;
    }

    /**
     * Check whether participant wants more advertisement via friends
     * @return Participant wants more advertisement via friends
     */
    public boolean getAdvFriendsWish() {
        return advFriendsWish;
    }

    /**
     * Set whether participant wants more advertisement via friends
     * @param friends Participant wants more advertisement via friends
     */
    public void setAdvFriendsWish(boolean friends) {
        this.advFriendsWish = friends;
    }

    /**
     * Get wish for other channels
     * @return Wish for other channels
     */
    public String getOtherWish() {
        return otherWish;
    }

    /**
     * Set wish for other channels
     * @param other Wish for other channels
     */
    public void setOtherWish(String other) {
        this.otherWish = other;
    }

    /**
     * Check whether participant wants to get aegeeMail
     * @return Participant wants to get aegeeMail
     */
    public boolean isAegeeMailFlag() {
        return aegeeMailFlag;
    }

    /**
     * Check whether participant got advertised via canteen
     * @return Participant got advertised via canteen
     */
    public boolean isAdvCanteen() {
        return advCanteen;
    }

    /**
     * Check whether participant wants more advertisement via canteen
     * @return Participant wants more advertisement via canteen
     */
    public boolean isAdvCanteenWish() {
        return advCanteenWish;
    }

    /**
     * Check whether participant got advertised via facebook
     * @return Participant got advertised via facebook
     */
    public boolean isAdvFacebook() {
        return advFacebook;
    }

    /**
     * Check whether participant wants more advertisement via facebook
     * @return Participant wants more advertisement via facebook
     */
    public boolean isAdvFacebookWish() {
        return advFacebookWish;
    }

    /**
     * Check whether participant got advertised via friends
     * @return Participant got advertised via friends
     */
    public boolean isAdvFriends() {
        return advFriends;
    }

    /**
     * Check whether participant wants more advertisement via friends
     * @return Participant wants more advertisement via freinds
     */
    public boolean isAdvFriendsWish() {
        return advFriendsWish;
    }

    /**
     * Check whether participant got advertised via mail
     * @return Participant got advertised via mail
     */
    public boolean isAdvMail() {
        return advMail;
    }

    /**
     * Check whether participant wants more advertisement via mail
     * @return Participant wants more advertisement via mail
     */
    public boolean isAdvMailWish() {
        return advMailWish;
    }

    /**
     * Check whether participant wants to get RunAndDine mail
     * @return Participant wants to get RunAndDine mail
     */
    public boolean isRadMailFlag() {
        return radMailFlag;
    }

    /**
     * Set whether participant wants to get aegeeMail
     * @param aegeeMailFlag Participant wants to get aegeeMail
     */
    public void setAegeeMailFlag(boolean aegeeMailFlag) {
        this.aegeeMailFlag = aegeeMailFlag;
    }

    /**
     * Set whether participant wants to get RunAndDine mail
     * @param radMailFlag Participant wants to get RunAndDine mail
     */
    public void setRadMailFlag(boolean radMailFlag) {
        this.radMailFlag = radMailFlag;
    }

    /**
     * Conversion to string for debugging
     * @return Debug information
     */
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("Feedback:");
        sb.append("\n additional Feedback:").append(additionalFeedback).append(", other advertisement:").append(otherAdv).append(", other Wish:").append(otherWish);
        sb.append("\n advMail:").append(advMail).append(", advCanteen:").append(advCanteen).append(", advFacebook:").append(advFacebook).append(", advFriends:").append(advFriends);
        sb.append("\n advMailWish:").append(advMailWish).append(", advCanteenWish:").append(advCanteenWish).append(", advFacebookWish:").append(advFacebookWish).append(", advFriendsWish:").append(advFriendsWish);
        sb.append("\n radMailFlag:").append(radMailFlag).append(", aegeeMailFlag:").append(aegeeMailFlag);
        sb.append("\n runAndDineId:").append(runAndDineId).append(", pointsRaD:").append(pointsRaD).append(", pointsMotto:").append(pointsMotto);
        return sb.toString();
    }
}
