package org.maepaysoh.maepaysohsdk;
import android.content.Context;
import android.database.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.maepaysoh.maepaysohsdk.api.FaqService;
import org.maepaysoh.maepaysohsdk.api.RetrofitHelper;
import org.maepaysoh.maepaysohsdk.db.FaqDao;
import org.maepaysoh.maepaysohsdk.models.FAQ;
import org.maepaysoh.maepaysohsdk.models.FAQDetailReturnObject;
import org.maepaysoh.maepaysohsdk.models.FAQListReturnObject;
import org.maepaysoh.maepaysohsdk.utils.FaqAPIProperties;
import org.maepaysoh.maepaysohsdk.utils.FaqAPIPropertiesMap;
import retrofit.Callback;
import retrofit.RestAdapter;
/**
* Created by yemyatthu on 8/11/15.
*/
public class FAQAPIHelper {
private RestAdapter mFaqRestAdapter;
private FaqService mFaqService;
private FaqDao mFaqDao;
private Context mContext;
protected FAQAPIHelper(String token, Context context) {
mFaqRestAdapter = RetrofitHelper.getResAdapter(token);
mFaqService = mFaqRestAdapter.create(FaqService.class);
mContext = context;
}
/**
* @param callback
*/
public void getFaqsAsync(Callback<FAQListReturnObject> callback) {
getFaqsAsync(new FaqAPIPropertiesMap(), callback);
}
/**
*
* @param faqAPIPropertiesMap
* @param callback
*/
public void getFaqsAsync(FaqAPIPropertiesMap faqAPIPropertiesMap,
Callback<FAQListReturnObject> callback) {
boolean unicode =
faqAPIPropertiesMap.getBoolean(FaqAPIProperties.IS_UNICODE, Utils.isUniCode(mContext));
int page = faqAPIPropertiesMap.getInteger(FaqAPIProperties.FIRST_PAGE, 1);
int per_page = faqAPIPropertiesMap.getInteger(FaqAPIProperties.PER_PAGE, 15);
Map<FaqService.PARAM_FIELD, String> optionParams = new HashMap<>();
if (unicode) {
optionParams.put(FaqService.PARAM_FIELD.font, Constants.UNICODE);
} else {
optionParams.put(FaqService.PARAM_FIELD.font, Constants.ZAWGYI);
}
optionParams.put(FaqService.PARAM_FIELD.page, String.valueOf(page));
optionParams.put(FaqService.PARAM_FIELD.per_page, String.valueOf(per_page));
mFaqService.listFaqsAsync(optionParams, callback);
}
/**
*
* @param faqAPIPropertiesMap
* @return
*/
public List<FAQ> getFaqs(FaqAPIPropertiesMap faqAPIPropertiesMap) {
boolean unicode =
faqAPIPropertiesMap.getBoolean(FaqAPIProperties.IS_UNICODE, Utils.isUniCode(mContext));
int page = faqAPIPropertiesMap.getInteger(FaqAPIProperties.FIRST_PAGE, 1);
int per_page = faqAPIPropertiesMap.getInteger(FaqAPIProperties.PER_PAGE, 15);
boolean cache = faqAPIPropertiesMap.getBoolean(FaqAPIProperties.CACHE, true);
mFaqDao = new FaqDao(mContext);
Map<FaqService.PARAM_FIELD, String> optionParams = new HashMap<>();
if (unicode) {
optionParams.put(FaqService.PARAM_FIELD.font, Constants.UNICODE);
} else {
optionParams.put(FaqService.PARAM_FIELD.font, Constants.ZAWGYI);
}
optionParams.put(FaqService.PARAM_FIELD.page, String.valueOf(page));
optionParams.put(FaqService.PARAM_FIELD.per_page, String.valueOf(per_page));
FAQListReturnObject faqListReturnObject = mFaqService.listFaqs(optionParams);
if (cache) {
for (FAQ FAQ : faqListReturnObject.getData()) {
try {
mFaqDao.createFaq(FAQ);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return faqListReturnObject.getData();
}
public List<FAQ> getFaqs() {
return getFaqs(new FaqAPIPropertiesMap());
}
/**
*
* @param keyword
* @param callback
*/
public void searchFaqsAsync(String keyword, Callback<FAQListReturnObject> callback) {
boolean unicode = Utils.isUniCode(mContext);
searchFaqsAsync(keyword, new FaqAPIPropertiesMap(), callback);
}
/**
*
* @param keyword
* @param callback
*/
public void searchFaqsAsync(String keyword, FaqAPIPropertiesMap faqAPIPropertiesMap,
Callback<FAQListReturnObject> callback) {
boolean unicode =
faqAPIPropertiesMap.getBoolean(FaqAPIProperties.IS_UNICODE, Utils.isUniCode(mContext));
Map<FaqService.PARAM_FIELD, String> optionParams = new HashMap<>();
if (unicode) {
optionParams.put(FaqService.PARAM_FIELD.font, Constants.UNICODE);
} else {
optionParams.put(FaqService.PARAM_FIELD.font, Constants.ZAWGYI);
}
optionParams.put(FaqService.PARAM_FIELD.q, keyword);
mFaqService.searchFaqsAsync(optionParams, callback);
}
public List<FAQ> searchFaq(String keyword) {
boolean unicode = Utils.isUniCode(mContext);
return searchFaq(keyword, new FaqAPIPropertiesMap());
}
/**
*
* @param keyword
* @return
*/
public List<FAQ> searchFaq(String keyword, FaqAPIPropertiesMap faqAPIPropertiesMap) {
boolean unicode =
faqAPIPropertiesMap.getBoolean(FaqAPIProperties.IS_UNICODE, Utils.isUniCode(mContext));
Map<FaqService.PARAM_FIELD, String> optionParams = new HashMap<>();
if (unicode) {
optionParams.put(FaqService.PARAM_FIELD.font, Constants.UNICODE);
} else {
optionParams.put(FaqService.PARAM_FIELD.font, Constants.ZAWGYI);
}
optionParams.put(FaqService.PARAM_FIELD.q, keyword);
return mFaqService.searchFaq(optionParams).getData();
}
public List<FAQ> searchFaqFromCache(String keyword) {
mFaqDao = new FaqDao(mContext);
try {
return mFaqDao.searchFAQsFromDb(keyword);
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
/**
*
* @return
*/
public List<FAQ> getFaqsFromCache() {
mFaqDao = new FaqDao(mContext);
return mFaqDao.getAllFaqData();
}
/**
*
* @param faqId
* @param callback
*/
public void getFaqByIdAsync(String faqId, Callback<FAQDetailReturnObject> callback) {
boolean unicode = Utils.isUniCode(mContext);
getFaqByIdAsync(faqId, new FaqAPIPropertiesMap(), callback);
}
/**
*
* @param faqId
* @param callback
*/
public void getFaqByIdAsync(String faqId, FaqAPIPropertiesMap faqAPIPropertiesMap,
Callback<FAQDetailReturnObject> callback) {
boolean unicode =
faqAPIPropertiesMap.getBoolean(FaqAPIProperties.IS_UNICODE, Utils.isUniCode(mContext));
Map<FaqService.PARAM_FIELD, String> optionParams = new HashMap<>();
if (unicode) {
optionParams.put(FaqService.PARAM_FIELD.font, Constants.UNICODE);
} else {
optionParams.put(FaqService.PARAM_FIELD.font, Constants.ZAWGYI);
}
mFaqService.searchFaqByIdAsync(faqId, optionParams, callback);
}
/**
*
* @param faqId
*/
public FAQ getFaqById(String faqId) {
boolean unicode = Utils.isUniCode(mContext);
return getFaqById(faqId, new FaqAPIPropertiesMap());
}
/**
*
* @param faqId
*/
public FAQ getFaqById(String faqId, FaqAPIPropertiesMap faqAPIPropertiesMap) {
boolean unicode =
faqAPIPropertiesMap.getBoolean(FaqAPIProperties.IS_UNICODE, Utils.isUniCode(mContext));
boolean cache = faqAPIPropertiesMap.getBoolean(FaqAPIProperties.CACHE, true);
mFaqDao = new FaqDao(mContext);
Map<FaqService.PARAM_FIELD, String> optionParams = new HashMap<>();
if (unicode) {
optionParams.put(FaqService.PARAM_FIELD.font, Constants.UNICODE);
} else {
optionParams.put(FaqService.PARAM_FIELD.font, Constants.ZAWGYI);
}
FAQDetailReturnObject returnObject = mFaqService.searchFaqById(faqId, optionParams);
FAQ faq = returnObject.getFAQ();
if (cache) {
mFaqDao.createFaq(faq);
}
return faq;
}
}