package com.aptoide.amethyst.webservices.v2;
import android.text.TextUtils;
import com.aptoide.amethyst.Aptoide;
import com.aptoide.amethyst.database.AptoideDatabase;
import com.aptoide.amethyst.preferences.EnumPreferences;
import com.aptoide.amethyst.utils.AptoideUtils;
import com.aptoide.amethyst.utils.ReferrerUtils;
import com.aptoide.dataprovider.webservices.models.Constants;
import com.aptoide.models.ApkSuggestionJson;
import com.aptoide.models.InstalledPackage;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.octo.android.robospice.request.retrofit.RetrofitSpiceRequest;
import com.squareup.okhttp.Callback;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import retrofit.http.FieldMap;
import retrofit.http.FormUrlEncoded;
import retrofit.http.POST;
/**
* Created by rmateus on 29-07-2014.
*/
public class GetAdsRequest extends RetrofitSpiceRequest<ApkSuggestionJson, GetAdsRequest.Webservice> {
private int CONNECTION_TIMEOUT = 10000;
private String location;
private String keyword;
private int limit;
private String package_name;
private String repo;
private String categories;
private String excludedPackage;
private boolean addGlobalExcludedAds;
private String excludedNetworks;
public GetAdsRequest(String excludedPackageName, boolean addGlobalExcludedAds) {
this();
this.excludedPackage = excludedPackageName;
this.addGlobalExcludedAds = addGlobalExcludedAds;
}
public GetAdsRequest() {
super(ApkSuggestionJson.class, Webservice.class);
}
public interface Webservice{
@POST("/webservices.aptwords.net/api/2/getAds")
@FormUrlEncoded
ApkSuggestionJson getAds(@FieldMap HashMap<String, String> arg);
}
String url = "http://webservices.aptwords.net/api/2/getAds";
@Override
public ApkSuggestionJson loadDataFromNetwork() throws Exception {
HashMap<String, String> parameters = new HashMap<>();
final AptoideDatabase database = new AptoideDatabase(Aptoide.getDb());
parameters.put("q", AptoideUtils.HWSpecifications.filters(Aptoide.getContext()));
parameters.put("lang", AptoideUtils.StringUtils.getMyCountryCode(Aptoide.getContext()));
String myid = AptoideUtils.getSharedPreferences().getString(EnumPreferences.APTOIDE_CLIENT_UUID.name(), "NoInfo");
parameters.put("cpuid", myid);
String mature = "0";
if(AptoideUtils.getSharedPreferences().getBoolean(Constants.MATURE_CHECK_BOX, false)) {
mature = "1";
}
parameters.put("aptvercode", String.valueOf(AptoideUtils.getSharedPreferences().getInt("version", 0)));
parameters.put("location","native-aptoide:" + location);
parameters.put("type", "1-3");
if(GooglePlayServicesUtil.isGooglePlayServicesAvailable(Aptoide.getContext())==0){
parameters.put("flag", "gms");
}
parameters.put("keywords", keyword);
parameters.put("categories", categories);
String oemid = Aptoide.getConfiguration().getExtraId();
if( !TextUtils.isEmpty(oemid) ){
parameters.put("oemid", oemid);
}
String join;
final ArrayList<String> excludedAds = database.getExcludedAds();
if(excludedPackage != null && !excludedPackage.isEmpty()){
excludedAds.add(excludedPackage);
}
if (excludedPackage == null || addGlobalExcludedAds) {
join = TextUtils.join(",", excludedAds);
} else {
join = excludedPackage;
}
if(!TextUtils.isEmpty(join)){
parameters.put("excluded_pkg", join);
}
parameters.put("limit", String.valueOf(limit));
parameters.put("get_mature", mature);
parameters.put("partners", "1-3,5-10");
//parameters.put("partners", "7-9");
parameters.put("app_pkg", package_name);
parameters.put("app_store", repo);
parameters.put("filter_pkg", "true");
parameters.put("conn_type", AptoideUtils.NetworkUtils.getConnectionType().toString());
if(Aptoide.DEBUG_MODE){
parameters.put("country", AptoideUtils.getSharedPreferences().getString("forcecountry", null));
}
if (excludedNetworks != null) {
parameters.put("excluded_partners", excludedNetworks);
}
ApkSuggestionJson result = getService().getAds(parameters);
Map<String, String> adsParams = new HashMap<String, String>();
adsParams.put("placement", location);
final ArrayList<String> arrayList = new ArrayList<>();
for(ApkSuggestionJson.Ads suggestionJson : result.ads) {
String ad_type = suggestionJson.info.ad_type;
adsParams.put("type", ad_type);
arrayList.add(suggestionJson.data.packageName);
// FlurryAgent.logEvent("Get_Sponsored_Ad", adsParams);
if(suggestionJson.partner != null){
try{
String impressionUrlString = suggestionJson.partner.partnerData.impression_url;
impressionUrlString = AptoideUtils.AdNetworks.parseString(Aptoide.getContext(), impressionUrlString);
Request request = new Request.Builder().get().url(impressionUrlString).build();
new OkHttpClient().newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
}
@Override
public void onResponse(Response response) throws IOException {
}
});
} catch (Exception ignored) {}
}
// Log.d("AdsFlurry", "Map is " + adsParams);
}
new Thread(new Runnable() {
@Override
public void run() {
ArrayList<String> installedPackages = new ArrayList<>();
List<InstalledPackage> startupInstalled = database.getStartupInstalled();
for (InstalledPackage installedPackage : startupInstalled) {
installedPackages.add(installedPackage.getPackage_name());
}
arrayList.retainAll(installedPackages);
arrayList.removeAll(excludedAds);
for (String excludedAd : arrayList) {
database.addToAdsExcluded(excludedAd);
}
}
}).start();
return result;
}
public void setTimeout(int timeout){
CONNECTION_TIMEOUT = timeout;
}
public void setLocation(String location) {
this.location = location;
}
public void setKeyword(String keyword) {
this.keyword = keyword;
}
public void setLimit(int limit) {
this.limit = limit;
}
public void setPackage_name(String package_name) {
this.package_name = package_name;
}
public void setRepo(String repo) {
this.repo = repo;
}
public void setCategories(String categories) {
this.categories = categories;
}
public static GetAdsRequest newDefaultRequest(String placement, String packageName) {
final GetAdsRequest request = new GetAdsRequest();
request.setLimit(1);
request.setLocation(placement);
request.setKeyword("__NULL__");
request.setPackage_name(packageName);
// Só queremos adicionar excluídos no secondtry.
if ("secondtry".equals(placement)) {
if (ReferrerUtils.excludedCampaings.containsKey(packageName)) {
request.excludedNetworks = AptoideUtils.StringUtils.commaSeparatedValues(ReferrerUtils.excludedCampaings.get(packageName));
}
}
return request;
}
}