package com.zegoggles.smssync.mail;
import android.text.TextUtils;
import com.fsck.k9.mail.Address;
import com.zegoggles.smssync.preferences.AddressStyle;
import java.util.Locale;
import static com.zegoggles.smssync.utils.Sanitizer.encodeLocal;
import static com.zegoggles.smssync.utils.Sanitizer.sanitize;
public class PersonRecord {
private static final String UNKNOWN_NUMBER = "unknown.number";
private static final String UNKNOWN_EMAIL = "unknown.email";
private final long _id;
private final String name, email, number;
/**
* @param id the id of the record
* @param name email name
* @param email the actual email address
* @param number the telephone number
*/
public PersonRecord(long id, String name, String email, String number) {
this._id = id;
this.name = sanitize(name);
this.number = sanitize(number);
this.email = sanitize(email);
}
public boolean isUnknown() {
return _id <= 0;
}
public Address getAddress(AddressStyle style) {
final String name;
switch (style) {
case NUMBER:
name = getNumber(); break;
case NAME_AND_NUMBER:
name = getNameWithNumber(); break;
case NAME:
name = getName(); break;
default:
name = null;
}
return new Address(getEmail(), name, !isEmailUnknown());
}
public String getEmail() {
return isEmailUnknown() ? getUnknownEmail(number) : email;
}
public String getId() {
return isUnknown() ? number : String.valueOf(getContactId());
}
public long getContactId() {
return _id;
}
public String getNumber() {
return (TextUtils.isEmpty(number) || "-1".equals(number) || "-2".equals(number)) ? "Unknown" : number;
}
public String getName() {
return !TextUtils.isEmpty(name) ? name : getNumber();
}
public String toString() {
return String.format(Locale.ENGLISH, "[name=%s email=%s id=%d]", getName(), email, _id);
}
private boolean isEmailUnknown() {
return isUnknown() || TextUtils.isEmpty(email);
}
private String getNameWithNumber() {
return name != null ? String.format(Locale.ENGLISH, "%s (%s)", getName(), getNumber()) : getNumber();
}
private static String getUnknownEmail(String number) {
final String no = (number == null || "-1".equals(number)) ? UNKNOWN_NUMBER : number;
return encodeLocal(no.trim()) + "@" + UNKNOWN_EMAIL;
}
}