package com.rapidftr.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.rapidftr.R;
import com.rapidftr.RapidFtrApplication;
import com.rapidftr.activity.CollectionActivity;
import com.rapidftr.forms.FormField;
import com.rapidftr.model.BaseModel;
import com.rapidftr.service.FormService;
import com.rapidftr.view.HighlightedFieldViewGroup;
import org.json.JSONException;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import static android.content.Context.LAYOUT_INFLATER_SERVICE;
public class HighlightedFieldsViewAdapter<T extends BaseModel> extends BaseModelViewAdapter<T> {
protected Map<Integer, FormField> highlightedFields;
private FormService formService;
private Class<CollectionActivity> activityToLaunch;
private final List<FormField> titleFields;
public HighlightedFieldsViewAdapter(Context context, List<T> baseModels, String formName, Class<CollectionActivity> activityToLaunch) {
super(context, R.layout.row_highlighted_fields, baseModels);
formService = RapidFtrApplication.getApplicationInstance().getBean(FormService.class);
List<FormField> fields = formService.getHighlightedFields(formName);
titleFields = formService.getTitleFields(formName);
highlightedFields = new TreeMap<Integer, FormField>();
this.activityToLaunch = activityToLaunch;
int counter = 0;
for (FormField formField : fields) {
int id = ++counter;
highlightedFields.put(id, formField);
}
}
@Override
public View getView(int position, View convertView, ViewGroup viewGroup){
View view = convertView;
if (view == null) {
LayoutInflater vi = (LayoutInflater) context.getSystemService(LAYOUT_INFLATER_SERVICE);
view = vi.inflate(textViewResourceId, null);
}
final T baseModel = objects.get(position) ;
if (baseModel != null) {
TextView uniqueIdView = (TextView) view.findViewById(R.id.row_child_unique_id);
HighlightedFieldViewGroup highlightedFieldViewGroup = (HighlightedFieldViewGroup) view.findViewById(R.id.child_field_group);
highlightedFieldViewGroup.prepare(baseModel, highlightedFields);
ImageView imageView = (ImageView) view.findViewById(R.id.thumbnail);
try {
setFields(String.valueOf(buildTitle(baseModel)), uniqueIdView);
assignThumbnail(baseModel, imageView);
view.setOnClickListener(createClickListener(baseModel, activityToLaunch));
} catch (JSONException e) {
throw new RuntimeException(e);
}
}
return view;
}
private String buildTitle(T baseModel) throws JSONException {
if(titleFields.size() == 0) {
return baseModel.getShortId();
}
StringBuilder titleBuilder = new StringBuilder();
for (int i = 0; i < titleFields.size(); i++) {
FormField titleField = titleFields.get(i);
titleBuilder.append(baseModel.optString(titleField.getId()));
if((i + 1) < titleFields.size()) {
titleBuilder.append(" ");
}
}
return String.format("%s (%s)", titleBuilder.toString(), baseModel.getShortId());
}
}