package edu.vandy.model.aidl;

import android.os.Parcel;
import android.os.Parcelable;

/**
 * This POJO class contains data for each Acronym Expansion.  It
 * implements the Parcelable interface to pass data between
 * AcronymActivity and DisplayAcronymExpansionActivity.  Parcelable
 * defines an interface for marshaling/de-marshaling
 * https://en.wikipedia.org/wiki/Marshalling_(computer_science)
 * to/from a format that Android uses to allow data transport between
 * processes on a device.  Discussion of the details of Parcelable is
 * outside the scope of this assignment, but you can read more at
 * https://developer.android.com/reference/android/os/Parcelable.html.
 */
public class AcronymExpansion        
       implements Parcelable {
    /**
     * Various tags corresponding to data downloaded in Json from the
     * Acronym Service.
     */
    final public static String lf_JSON = "lf";
    final public static String freq_JSON = "freq";
    final public static String since_JSON = "since";

    /*
     * These data members are the local variables that will store
     * the AcronymExpansion's state.
     */

    /**
     * The long form of the acronym (spelled out version).
     */
    private String lf;

    /**
     * The relative frequency of usage in print, of this meaning
     * of the acronym.
     */
    private int freq;

    /**
     * The year the acronym was added to this database of
     * acronyms, or was originally termed.
     */
    private int since;
        
    /**
     * Default constructor.
     */
    public AcronymExpansion() {
            
    }
        
    /**
     * Constructor that initialises an AcronymExpansion object
     * from its parameters.
     */
    public AcronymExpansion(String lf,
                            int freq,
                            int since) {
        this.lf = lf;
        this.freq = freq;
        this.since = since;
    }

    /**
     * Private constructor provided for the CREATOR interface,
     * which is used to de-marshal an AcronymExpansion from the
     * Parcel of data.
     */
    private AcronymExpansion(Parcel in) {
        lf = in.readString();
        freq = in.readInt();
        since = in.readInt();
    }

    /*
     * Getters and setters to access AcronymExpansion.
     */

    public String getLf() {
        return lf;
    }

    public void setLf(String lf) {
        this.lf = lf;
    }

    public int getFreq() {
        return freq;
    }

    public void setFreq(int freq) {
        this.freq = freq;
    }

    public int getSince() {
        return since;
    }

    public void setSince(int since) {
        this.since = since;
    }

    /**
     * The toString() custom implementation.
     */
    @Override
        public String toString() {
        return "AcronymExpansion [lf=" 
            + lf 
            + ", freq=" 
            + freq 
            + ", since=" 
            + since
            + "]";
    }

    /*
     * Parcelable related methods.
     */

    /**
     * A bitmask indicating the set of special object types
     * marshaled by the Parcelable.
     */
    @Override
        public int describeContents() {
        return 0;
    }

    /**
     * Marshal this ParcelableAcronymExpansion to the target Parcel.
     */
    @Override
        public void writeToParcel(Parcel dest,
                                  int flags) {
        dest.writeString(lf);
        dest.writeInt(freq);
        dest.writeInt(since);
    }

    /**
     * public Parcelable.Creator for AcronymExpansion,
     * which is an interface that must be implemented and provided
     * as a public CREATOR field that generates instances of your
     * Parcelable class from a Parcel.
     */
    public static final Parcelable.Creator<AcronymExpansion> CREATOR =
        new Parcelable.Creator<AcronymExpansion>() {
        public AcronymExpansion createFromParcel(Parcel in) {
            return new AcronymExpansion(in);
        }

        public AcronymExpansion[] newArray(int size) {
            return new AcronymExpansion[size];
        }
    };
}
