package com.yassirh.digitalocean.utils;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Locale;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.util.Log;
import android.widget.Toast;
import com.yassirh.digitalocean.R;
import com.yassirh.digitalocean.data.AccountDao;
import com.yassirh.digitalocean.data.DatabaseHelper;
import com.yassirh.digitalocean.model.Account;
import com.yassirh.digitalocean.service.DomainService;
import com.yassirh.digitalocean.service.DropletService;
import com.yassirh.digitalocean.service.FloatingIPService;
import com.yassirh.digitalocean.service.ImageService;
import com.yassirh.digitalocean.service.RegionService;
import com.yassirh.digitalocean.service.SSHKeyService;
import com.yassirh.digitalocean.service.SizeService;
public class ApiHelper {
public static final String API_URL = "https://api.digitalocean.com/v2";
public static SimpleDateFormat iso8601Format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.US);
public static Account getCurrentAccount(Context context){
Account currentAccount = null;
AccountDao accountDao = new AccountDao(DatabaseHelper.getInstance(context));
List<Account> accounts = accountDao.getAll(null);
// used to get the config from the shared preferences
if(accounts.size() == 0){
currentAccount = new Account();
String token = getToken(context);
String accountName = getAccountName(context);
if("".equals(accountName)){
accountName = "default";
}
if(isValidToken(token)){
currentAccount.setId(1L);
currentAccount.setName(accountName);
currentAccount.setToken(token);
currentAccount.setSelected(true);
accountDao.createOrUpdate(currentAccount);
}
}else{
for (Account account : accounts) {
if(account.isSelected()){
currentAccount = account;
break;
}
}
if(currentAccount != null && !getAccountName(context).equals(currentAccount.getName())){
currentAccount.setName(getAccountName(context));
accountDao.createOrUpdate(currentAccount);
}
}
return currentAccount;
}
public static boolean isValidToken(String token) {
return token != null && token.matches("^[a-f0-9]{64}$");
}
public static List<Account> getAllAccounts(Context context){
AccountDao accountDao = new AccountDao(DatabaseHelper.getInstance(context));
return accountDao.getAll(null);
}
public static String getAccountName(Context context) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
return sharedPreferences.getString("account_name_preference", "");
}
public static String getToken(Context context) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
return sharedPreferences.getString("token_preference", "");
}
public static int getImageLogo(String image, String distribution, String status){
if(image.contains("WordPress") || image.contains("Wordpress")){
return status.equals("active") ? R.drawable.wordpress_active : R.drawable.wordpress;
}
else if(image.contains("NodeJS")){
return status.equals("active") ? R.drawable.nodejs_active : R.drawable.nodejs;
}
else if(image.contains("Dokku")){
return status.equals("active") ? R.drawable.dokku_active : R.drawable.dokku;
}
else if(image.contains("Docker")){
return status.equals("active") ? R.drawable.docker_active : R.drawable.docker;
}
else if(image.contains("Drupal")){
return status.equals("active") ? R.drawable.drupal_active : R.drawable.drupal;
}
else if(image.contains("Django")){
return status.equals("active") ? R.drawable.django_active : R.drawable.django;
}
else if(image.contains("Ghost")){
return status.equals("active") ? R.drawable.ghost_active : R.drawable.ghost;
}
else if(image.contains("LAMP")){
return status.equals("active") ? R.drawable.lamp_stack_active : R.drawable.lamp_stack;
}
else if(image.contains("GitLab")){
return status.equals("active") ? R.drawable.gitlab_active : R.drawable.gitlab;
}
else if(image.contains("Redmine")){
return status.equals("active") ? R.drawable.redmine_active : R.drawable.redmine;
}
else if(image.contains("Magento")){
return status.equals("active") ? R.drawable.magento_active : R.drawable.magento;
}
else if(image.contains("MEAN")){
return status.equals("active") ? R.drawable.mean_active : R.drawable.mean;
}
else if(image.contains("LEMP")){
return status.equals("active") ? R.drawable.lemp_active : R.drawable.lemp;
}
else if(image.contains("ownCloud")){
return status.equals("active") ? R.drawable.owncloud_active : R.drawable.owncloud;
}
else if(image.contains("Ruby on Rails") || image.contains("Ruby-on-Rails")){
return status.equals("active") ? R.drawable.ruby_on_rails_active : R.drawable.ruby_on_rails;
}
else if(image.contains("Cassandra") || image.contains("cassandra")){
return status.equals("active") ? R.drawable.cassandra_active : R.drawable.cassandra;
}
else if(image.contains("Discourse")){
return status.equals("active") ? R.drawable.discourse_active : R.drawable.discourse;
}
else if(image.contains("Drone")){
return status.equals("active") ? R.drawable.drone_active : R.drawable.drone;
}
else if(image.contains("ELK")){
return status.equals("active") ? R.drawable.elk_active : R.drawable.elk;
}
else if(image.contains("Elixir")){
return status.equals("active") ? R.drawable.elixir_active : R.drawable.elixir;
}
else if(image.contains("Horizon")){
return status.equals("active") ? R.drawable.horizon_active : R.drawable.horizon;
}
else if(image.contains("MediaWiki")){
return status.equals("active") ? R.drawable.mediawiki_active : R.drawable.mediawiki;
}
else if(image.contains("MongoDB")){
return status.equals("active") ? R.drawable.mongodb_active : R.drawable.mongodb;
}
else if(image.contains("Mumble")){
return status.equals("active") ? R.drawable.mumble_active : R.drawable.mumble;
}
else if(image.contains("PHPMyAdmin")){
return status.equals("active") ? R.drawable.phpmyadmin_active : R.drawable.phpmyadmin;
}
else if(image.contains("Redis")){
return status.equals("active") ? R.drawable.redis_active : R.drawable.redis;
}
return getDistributionLogo(distribution, status);
}
public static int getDistributionLogo(String distribution, String status){
if(distribution.equalsIgnoreCase("Ubuntu")){
return status.equals("active") ? R.drawable.ubuntu_active : R.drawable.ubuntu;
}
else if(distribution.equalsIgnoreCase("Debian")){
return status.equals("active") ? R.drawable.debian_active : R.drawable.debian;
}
else if(distribution.equalsIgnoreCase("CentOS")){
return status.equals("active") ? R.drawable.centos_active : R.drawable.centos;
}
else if(distribution.equalsIgnoreCase("Fedora")){
return status.equals("active") ? R.drawable.fedora_active : R.drawable.fedora;
}
else if(distribution.equalsIgnoreCase("CoreOS")){
return status.equals("active") ? R.drawable.coreos_active : R.drawable.coreos;
}
else if(distribution.equalsIgnoreCase("FreeBSD")){
return status.equals("active") ? R.drawable.freebsd_active : R.drawable.freebsd;
}
return R.drawable.unknown;
}
public static int getLocationFlag(String region, boolean isAvailable){
if(region.contains("Amsterdam"))
return isAvailable ? R.drawable.nl_flag : R.drawable.nl_flag_unavailable;
else if(region.contains("New York") || region.contains("San Francisco"))
return isAvailable ? R.drawable.us_flag : R.drawable.us_flag_unavailable;
else if(region.contains("Singapore"))
return isAvailable ? R.drawable.sg_flag : R.drawable.sg_flag_unavailable;
else if(region.contains("London"))
return isAvailable ? R.drawable.uk_flag : R.drawable.uk_flag_unavailable;
else if(region.contains("Frankfurt"))
return isAvailable ? R.drawable.de_flag : R.drawable.de_flag_unavailable;
else if(region.contains("Toronto"))
return isAvailable ? R.drawable.ca_flag : R.drawable.ca_flag_unavailable;
else if(region.contains("Bangalore"))
return isAvailable ? R.drawable.in_flag : R.drawable.in_flag_unavailable;
else
return isAvailable ? R.drawable.unknown : R.drawable.unknown_unavailable;
}
public static int getRecordLabel(String recordType){
switch (recordType) {
case "A":
return R.drawable.a;
case "AAAA":
return R.drawable.aaaa;
case "CNAME":
return R.drawable.cname;
case "MX":
return R.drawable.mx;
case "TXT":
return R.drawable.txt;
case "SRV":
return R.drawable.srv;
case "NS":
return R.drawable.ns;
}
return 0;
}
public static void selectAccount(Context context, Account account) {
AccountDao accountDao = new AccountDao(DatabaseHelper.getInstance(context));
accountDao.unSelectAll();
account.setSelected(true);
accountDao.createOrUpdate(account);
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("account_name_preference", account.getName());
editor.putString("token_preference", account.getToken());
editor.commit();
ImageService imageService = new ImageService(context);
imageService.deleteAll();
imageService.getAllImagesFromAPI(true);
DomainService domainService = new DomainService(context);
domainService.deleteAll();
domainService.getAllDomainsFromAPI(true);
DropletService dropletService = new DropletService(context);
dropletService.deleteAll();
dropletService.getAllDropletsFromAPI(true, true);
RegionService regionService = new RegionService(context);
regionService.deleteAll();
regionService.getAllRegionsFromAPI(true);
SSHKeyService sshKeyService = new SSHKeyService(context);
sshKeyService.deleteAll();
sshKeyService.getAllSSHKeysFromAPI(true);
SizeService sizeService = new SizeService(context);
sizeService.deleteAll();
sizeService.getAllSizesFromAPI(true);
FloatingIPService floatingIPService = new FloatingIPService(context);
floatingIPService.deleteAll();
floatingIPService.getAllFromAPI(true);
}
private static Toast toast;
public static void showAccessDenied() {
if(toast == null){
toast = Toast.makeText(MyApplication.getAppContext(), R.string.access_denied_message, Toast.LENGTH_SHORT);
}
if(toast.getView().getWindowToken() == null){
toast.show();
}
}
}