package ca.grocerygo.android.fragment;
import android.content.Context;
import android.database.Cursor;
import android.support.v4.widget.SimpleCursorAdapter.ViewBinder;
import android.util.SparseArray;
import android.view.View;
import android.widget.CheckBox;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import ca.grocerygo.android.R;
import ca.grocerygo.android.database.CartTable;
import ca.grocerygo.android.database.FlyerTable;
import ca.grocerygo.android.database.GroceryTable;
import ca.grocerygo.android.database.StoreParentTable;
import ca.grocerygo.android.utils.GroceryRefreshTrigger;
import ca.grocerygo.android.utils.GroceryStoreDistanceMap;
import ca.grocerygo.android.utils.ServerURLs;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;
public class GroceryViewBinder implements SimpleCursorAdapter.ViewBinder, ViewBinder {
private Context mContext;
private Map<String, Integer> mStoreParentIconMap;
private SparseArray<ArrayList<Integer>> mFlyerStoreMap;
public GroceryViewBinder(Context context) {
this.mContext = context;
this.mStoreParentIconMap = GroceryStoreDistanceMap.getmStoreParentIconMap();
this.mFlyerStoreMap = GroceryStoreDistanceMap.getmFlyerStoreMap();
}
@Override
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
int viewId = view.getId();
if (columnIndex == cursor.getColumnIndex(GroceryTable.COLUMN_GROCERY_PRICE)
&& viewId == R.id.grocery_row_price) {
TextView textView = (TextView) view;
if (cursor.getDouble(columnIndex) != 0) {
textView.setText("$" + ServerURLs.getGetDecimalFormat().format(cursor.getDouble(columnIndex)));
} else {
textView.setText(R.string.no_price_available);
}
return true;
}
else if (columnIndex == cursor.getColumnIndex(GroceryTable.COLUMN_GROCERY_EXPIRY)
&& viewId == R.id.grocery_row_expiry) {
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date theExpiryDate = new Date(Long.valueOf(cursor.getString(columnIndex)));
String expiryDate = formatter.format(theExpiryDate);
Date todayDate = new Date();
// Compare dates only, regardless of time
Calendar expiry = Calendar.getInstance();
expiry.setTime(theExpiryDate);
expiry.set(Calendar.MILLISECOND,0);
expiry.set(Calendar.SECOND, 0);
expiry.set(Calendar.MINUTE, 0);
expiry.set(Calendar.HOUR_OF_DAY, 0);
Calendar calendar = Calendar.getInstance();
calendar.setTime(todayDate);
calendar.set(Calendar.MILLISECOND,0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.HOUR_OF_DAY, 0);
int dateDiff = (int)(expiry.getTimeInMillis()-calendar.getTimeInMillis())/(1000*3600*24);
TextView textView = (TextView) view;
if (dateDiff < 0) {
textView.setText(mContext.getString(R.string.grocery_row_expired) + " " + expiryDate);
textView.setTextColor(mContext.getResources().getColor(R.color.holo_red_light));
// Store in the database that we have expired data and would like to be able to refresh
GroceryRefreshTrigger.enableRefresh(mContext);
} else {
textView.setText(mContext.getString(R.string.grocery_row_expires) + " " + expiryDate);
textView.setTextColor(mContext.getResources().getColor(R.color.holo_gray_light));
}
return true;
}
else if (columnIndex == cursor.getColumnIndex(GroceryTable.COLUMN_GROCERY_ID)
&& viewId == R.id.grocery_row_id) {
String itemText = cursor.getString(columnIndex);
TextView textView = (TextView) view;
if (itemText == null) {
textView.setText("");
return true;
}
textView.setText(itemText);
return true;
}
else if (columnIndex == cursor.getColumnIndex(CartTable.COLUMN_CART_GROCERY_ID)
&& viewId == R.id.grocery_row_cart_item_id) {
String itemText = cursor.getString(columnIndex);
TextView textView = (TextView) view;
if (itemText == null) {
textView.setText("");
return true;
}
textView.setText(itemText);
return true;
}
else if ((columnIndex == cursor.getColumnIndex(GroceryTable.COLUMN_GROCERY_NAME)
|| columnIndex == cursor.getColumnIndex(CartTable.COLUMN_CART_GROCERY_NAME))
&& viewId == R.id.grocery_row_label) {
String itemText = cursor.getString(columnIndex);
TextView textView = (TextView) view;
if (itemText == null) {
return true;
}
itemText = cursor.getString(columnIndex);
String delim_period = ". ";
String delim_comma = ", ";
String regex_period = "\\.\\s";
String regex_comma = ",\\s";
if (itemText.indexOf(delim_period) != -1) {
String[] itemArray = itemText.split(regex_period);
itemText = itemArray[0];
} else if (itemText.indexOf(delim_comma) != -1) {
String[] itemArray = itemText.split(regex_comma);
itemText = itemArray[0];
}
textView.setText(itemText);
return true;
}
else if ((columnIndex == cursor.getColumnIndex(GroceryTable.COLUMN_GROCERY_NAME)
|| columnIndex == cursor.getColumnIndex(CartTable.COLUMN_CART_GROCERY_NAME))
&& viewId == R.id.grocery_row_details) {
String itemText = cursor.getString(columnIndex);
String itemDetails = "";
TextView textView = (TextView) view;
if (itemText == null) {
return true;
}
String delim_period = ". ";
String delim_comma = ", ";
String regex_period = "\\.\\s";
String regex_comma = ",\\s";
if (itemText.indexOf(delim_period) != -1) {
String[] itemArray = itemText.split(regex_period);
List<String> itemList = Arrays.asList(itemArray);
List<String> itemSublist = itemList.subList(1, itemList.size());
itemText = itemArray[0];
if (itemSublist.size() < 1) {
itemDetails = "";
}
else {
StringBuilder sb = new StringBuilder();
for (String s : itemSublist) {
sb.append(s).append(delim_period);
}
sb.deleteCharAt(sb.length() - 1); // delete last delimiter
sb.deleteCharAt(sb.length() - 1);
itemDetails = sb.toString();
}
}
else if (itemText.indexOf(delim_comma) != -1) {
String[] itemArray = itemText.split(regex_comma);
List<String> itemList = Arrays.asList(itemArray);
List<String> itemSublist = itemList.subList(1, itemList.size());
itemText = itemArray[0];
if (itemSublist.size() < 1) {
itemDetails = "";
}
else {
StringBuilder sb = new StringBuilder();
for (String s : itemSublist) {
sb.append(s).append(delim_comma);
}
sb.deleteCharAt(sb.length() - 1); // delete last delimiter
sb.deleteCharAt(sb.length() - 1);
itemDetails = sb.toString();
}
}
textView.setText(itemDetails);
return true;
}
else if (columnIndex == cursor.getColumnIndex(CartTable.COLUMN_CART_FLAG_SHOPLIST)
&& viewId == R.id.grocery_row_in_shopcart) {
Integer inShoplist = cursor.getInt(columnIndex);
CheckBox cb = (CheckBox) view;
if (inShoplist != 0) {
cb.setChecked(true);
cb.setBackgroundColor(mContext.getResources().getColor(R.color.holo_blue_very_light));
}
else {
cb.setChecked(false);
cb.setBackgroundColor(mContext.getResources().getColor(R.color.semi_transparent));
}
return true;
}
else if (columnIndex == cursor.getColumnIndex(StoreParentTable.COLUMN_STORE_PARENT_NAME)
&& viewId == R.id.grocery_row_store_parent_name) {
String storeParentName = cursor.getString(columnIndex);
TextView textView = (TextView) view;
if (storeParentName == null) {
textView.setText("");
textView.setTag(null);
return true;
}
textView.setText(storeParentName);
Integer iconId = (Integer) mStoreParentIconMap.get(storeParentName);
textView.setTag(iconId);
return true;
}
else if (columnIndex == cursor.getColumnIndex(FlyerTable.COLUMN_FLYER_ID)
&& viewId == R.id.grocery_row_store_id) {
String itemText = cursor.getString(columnIndex);
TextView text = (TextView) view;
if (itemText == null) {
text.setText("");
return true;
}
ArrayList<Integer> list = mFlyerStoreMap.get(Integer.parseInt(itemText));
if (list == null) {
text.setText("");
return true;
}
// Pack the list for store IDs into a string
StringBuilder sb = new StringBuilder();
for (Integer i : list) {
sb.append("," + Integer.toString(i));
}
if (list.size() > 0)
sb.replace(0, 1, "");
text.setText(sb.toString());
return true;
}
return false;
}
}