package com.xiaomi.xms.sales.loader;
import android.content.Context;
import android.text.TextUtils;
import com.xiaomi.xms.sales.ShopApp;
import com.xiaomi.xms.sales.model.Image;
import com.xiaomi.xms.sales.model.ProductInfo;
import com.xiaomi.xms.sales.model.Tags;
import com.xiaomi.xms.sales.request.HostManager;
import com.xiaomi.xms.sales.request.HostManager.Parameters;
import com.xiaomi.xms.sales.request.Request;
import com.xiaomi.xms.sales.util.Constants;
import com.xiaomi.xms.sales.util.JsonUtil;
import com.xiaomi.xms.sales.util.Utils;
import com.xiaomi.xms.sales.xmsf.account.LoginManager;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
public class SearchResultLoader extends BasePageLoader<SearchResultLoader.Result> {
private String mCategoryId;
private String mKeyWord;
public SearchResultLoader(Context context, String categoryId, String keyWord) {
super(context);
mCategoryId = categoryId;
mKeyWord = keyWord;
setNeedDatabase(false);
}
public static final class Result extends BaseResult {
public ArrayList<ProductInfo> mProductInfos;
public String mTotalCount;
public Result() {
mProductInfos = new ArrayList<ProductInfo>();
}
@Override
public int getCount() {
return mProductInfos == null ? 0 : mProductInfos.size();
}
private void addList(ArrayList<ProductInfo> alist) {
if (alist != null) {
mProductInfos.addAll(alist);
}
}
@Override
public BaseResult shallowClone() {
Result newResult = new Result();
newResult.mProductInfos = mProductInfos;
newResult.mTotalCount = mTotalCount;
return newResult;
}
}
@Override
protected UpdateTask getUpdateTask() {
return new SearchResultUpdateTask();
}
private class SearchResultUpdateTask extends PageUpdateLTask {
@Override
protected Request getRequest(int page) {
Request request = new Request(HostManager.URL_XMS_SALE_API);
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put(Tags.XMSAPI.USERID, LoginManager.getInstance().getUserId());
jsonObject.put(Parameters.Keys.CATEGORY_ID, mCategoryId);
jsonObject.put(Parameters.Keys.PAGE_INDEX, String.valueOf(page));
jsonObject.put(Parameters.Keys.PAGE_SIZE,
String.valueOf(Parameters.Values.PAGESIZE_VALUE));
jsonObject.put(Parameters.Keys.KEYWORD, mKeyWord);
jsonObject.put("orgId",
Utils.Preference.getStringPref(ShopApp.getContext(), Constants.Account.PREF_USER_ORGID, ""));
String data = JsonUtil.creatRequestJson(HostManager.Method.METHOD_SEARCHGOODSLIST, jsonObject);
if (!TextUtils.isEmpty(data)) {
request.addParam(Tags.RequestKey.DATA, data);
}
} catch (JSONException e) {
e.printStackTrace();
}
return request;
}
@Override
protected Result merge(Result oldResult, Result newResult) {
Result result = new Result();
if (oldResult.mProductInfos != null) {
result.addList(oldResult.mProductInfos);
}
if (newResult.mProductInfos != null) {
result.addList(newResult.mProductInfos);
}
if (!TextUtils.isEmpty(oldResult.mTotalCount)) {
result.mTotalCount = oldResult.mTotalCount;
}
return result;
}
}
@Override
protected Result parseResult(JSONObject json, Result result) throws Exception {
result.mProductInfos = valueOf(json);
result.mTotalCount = ProductInfo.getSearchResultCount(json);
return result;
}
@Override
protected Result getResultInstance() {
return new Result();
}
@Override
protected String getCacheKey() {
return null;
}
public static ArrayList<ProductInfo> valueOf(JSONObject json) throws JSONException {
ArrayList<ProductInfo> list = null;
if (Tags.isJSONReturnedOK(json)) {
String bodyStr = json.optString(Tags.BODY);
if (!TextUtils.isEmpty(bodyStr)) {
JSONObject body = new JSONObject(bodyStr);
JSONArray productJsonArray = body.optJSONArray(Tags.Product.PRODUCT);
if (productJsonArray != null) {
list = new ArrayList<ProductInfo>();
for (int i = 0; i < productJsonArray.length(); i++) {
if (!productJsonArray.isNull(i)) {
JSONObject proJsonobject = (JSONObject) productJsonArray.get(i);
String productId = proJsonobject.optString(Tags.Product.PRODUCT_ID);
String productName = proJsonobject.optString(Tags.Product.PRODUCT_NAME);
String price = proJsonobject.optString(Tags.Product.PRICE);
String marketPrice = proJsonobject.optString(Tags.Product.MARKET_PRICE);
String styleName = proJsonobject.optString(Tags.Product.STYLE_NAME);
boolean hasProduct = proJsonobject.optBoolean(Tags.Product.IS_COS);
String imageUrl = proJsonobject.optString(Tags.Product.IMAGE_URL);
String url = proJsonobject.optString(Tags.Product.URL, "");
String displayType = proJsonobject.optString(Tags.Product.DISPLAY_TYPE,
Tags.Product.DISPLAY_NATIVE);
String pid = proJsonobject.optString(Tags.Product.P_ID, productId);
boolean isBatched = proJsonobject.optBoolean(Tags.Product.IS_BATCHED, false);
String containId = proJsonobject.optString(Tags.Product.CONTAINID);
ProductInfo productInfo = new ProductInfo(productId, productName, price, marketPrice,
styleName, !hasProduct, new Image(imageUrl), url, displayType);
productInfo.setPid(pid);
productInfo.setIsBatched(isBatched);
productInfo.setContainId(containId);
list.add(productInfo);
}
}
}
}
}
return list;
}
}