package profiles;


/**
 * E' una coppia VALORE_ATTUALE, VALORE_DESIDERATO.
 * @author Lorenzo Moretti
 * @version 1.0
 */
public class Profile {
  String owner = "";
  String actualValue = "";
  String requestedValue = "";

  /**
   * Crea un nuovo profilo.
   * @param owner l'id del dispositivo a cui appartiene il profilo.
   */
  public Profile(String owner) {
    this.owner = owner;
  }

  /**
   * Imposta il valore del dispositivo. E' il valore del profilo del dispositivo.
   * Dovrebbe descrivere una qualità, come ad esempio ALTO, UOMO, DONNA, BIONDO...
   * @param actualValue il valore del profilo.
   */
  public void setActualValue(String actualValue) {
    this.actualValue = actualValue;
  }

  /**
   * Restituisce il valore del dispositivo. E' il valore del profilo del dispositivo.
   * Dovrebbe descrivere una qualità, come ad esempio ALTO, UOMO, DONNA, BIONDO...
   * @return il valore del profilo.
   */
  public String getActualValue() {
    return actualValue;
  }

  public void setRequestedValue(String requestedValue) {
    this.requestedValue = requestedValue;
  }

  public String getRequestedValue() {
    return requestedValue;
  }

  /**
   * Confronta due profili.
   * Due Profili fanno match se il valore attuale di uno è quello richiesto
   * dall'altro e viceversa.
   * @param p il profilo da considerare
   * @return true se i profili fanno match, false altrimenti
   */
  public boolean match(Profile p) {
    return (p.getActualValue().equals(getRequestedValue()) &&
            p.getRequestedValue().equals(getActualValue()));
  }

  public boolean equals(Profile p) {
    return (p.owner.equals(owner));
  }

  public String getOwner() {
    return owner;
  }

  public String toString() {
    return "@"+owner + "," + actualValue + "," + requestedValue;
  }

  public static Profile fromString(String str) {
    int pos = 1;
    StringBuffer sbuff = new StringBuffer();
    while (str.charAt(pos) != ',') {
      sbuff.append(str.charAt(pos));
      pos++;
    }
    pos++;
    String owner = sbuff.toString();

    sbuff = new StringBuffer();
    while (str.charAt(pos) != ',') {
      sbuff.append(str.charAt(pos));
      pos++;
    }
    pos++;
    String actual = sbuff.toString();

    sbuff = new StringBuffer();
    while (pos < str.length()) {
      sbuff.append(str.charAt(pos));
      pos++;
    }
    pos++;
    String req = sbuff.toString();

    Profile p = new Profile(owner);
    p.setActualValue(actual);
    p.setRequestedValue(req);
    return p;
  }
}