package de.qspool.clementineremote.backend.library;

import android.content.Context;
import android.content.SharedPreferences;
import android.database.sqlite.SQLiteDatabase;
import android.preference.PreferenceManager;

import de.qspool.clementineremote.SharedPreferencesKeys;
import de.qspool.clementineremote.backend.database.DynamicSongQuery;

public class LibraryQuery extends DynamicSongQuery {

    public LibraryQuery(Context context) {
        super(context);
    }

    @Override
    protected String[] getSelectedFields() {
        SharedPreferences sharedPreferences = PreferenceManager
                .getDefaultSharedPreferences(mContext);

        String grouping = sharedPreferences.getString(SharedPreferencesKeys.SP_LIBRARY_GROUPING,
                "artist-album");
        String[] selectedFields = new String[] {"artist", "title"};

        switch (grouping) {
            case "artist":
                selectedFields = new String[] {"artist", "title"};
                break;
            case "artist-album":
                selectedFields = new String[] {"artist", "album", "title"};
                break;
            case "albumartist-album":
                selectedFields = new String[] {"albumartist", "album", "title"};
                break;
            case "artist-year":
                selectedFields = new String[] {"artist", "year", "title"};
                break;
            case "album":
                selectedFields = new String[] {"album", "title"};
                break;
            case "genre-album":
                selectedFields = new String[] {"genre", "album", "title"};
                break;
            case "genre-artist-album":
                selectedFields = new String[] {"genre", "artist", "album", "title"};
                break;
        }
        return selectedFields;
    }

    @Override
    protected String getSorting() {
        SharedPreferences sharedPreferences = PreferenceManager
                .getDefaultSharedPreferences(mContext);

        return sharedPreferences.getString(SharedPreferencesKeys.SP_LIBRARY_SORTING, "ASC");
    }

    @Override
    protected String getTable() {
        return LibraryDatabaseHelper.SONGS;
    }

    @Override
    public SQLiteDatabase getReadableDatabase() {
        return new LibraryDatabaseHelper().openDatabase(SQLiteDatabase.OPEN_READONLY);
    }

    @Override
    public String getMatchesSubQuery(String match) {
        StringBuilder sb = new StringBuilder();

        sb.append("(SELECT * FROM ");
        sb.append(LibraryDatabaseHelper.SONGS_FTS);
        sb.append(" WHERE ");
        sb.append(LibraryDatabaseHelper.SONGS_FTS);
        sb.append(" MATCH \"");
        sb.append(match);
        sb.append("*");

        sb.append("\" ) ");

        return sb.toString();
    }
}