package com.etiennelawlor.loop.realm;

import android.text.TextUtils;

import com.etiennelawlor.loop.realm.objects.RealmSuggestion;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import io.realm.Realm;
import io.realm.RealmResults;
import io.realm.Sort;

/**
 * Created by etiennelawlor on 10/8/15.
 */
public class RealmUtility {

    public static void saveQuery(String query){
        Realm realm = Realm.getDefaultInstance();
        try {
            RealmSuggestion realmSuggestion = new RealmSuggestion();
            realmSuggestion.setToken(query);
            realmSuggestion.setTimestamp(new Date());
            realm.beginTransaction();
            // This will create a new one in Realm
            // realm.copyToRealm(obj);
            // This will update a existing one with the same id or create a new one instead
            realm.copyToRealmOrUpdate(realmSuggestion);

            realm.commitTransaction();
        } finally {
            realm.close();
        }
    }

    public static void deleteQuery(String query){
        Realm realm = Realm.getDefaultInstance();
        try {
            realm.beginTransaction();

            RealmSuggestion realmSuggestion
                    = realm.where(RealmSuggestion.class)
                    .equalTo("token", query)
                    .findFirst();

            if(realmSuggestion != null){
                realmSuggestion.deleteFromRealm();
            }

            realm.commitTransaction();
        } finally {
            realm.close();
        }
    }

    public static List<String> getSuggestions(String query) {
        List<String> suggestions = new ArrayList<>();

        Realm realm = Realm.getDefaultInstance();
        try {
            RealmResults<RealmSuggestion> realmResults
                    = realm.where(RealmSuggestion.class)
                    .contains("token", query)
                    .findAll();

            realmResults = realmResults.sort("timestamp", Sort.DESCENDING);

            if (realmResults != null) {
                int size = (realmResults.size() > 5) ? 5 : realmResults.size();
                for (int i = 0; i < size; i++) {
                    RealmSuggestion realmSuggestion = realmResults.get(i);
                    if (realmSuggestion != null) {
                        String token = realmSuggestion.getToken();
                        if (!TextUtils.isEmpty(token)) {
                            suggestions.add(suggestions.size(), token);
                        }
                    }
                }
            }
        } finally {
            realm.close();
        }

        return suggestions;
    }
}