package co.jasonwyatt.sqliteperf.blobs.cases;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Random;

import co.jasonwyatt.sqliteperf.App;
import co.jasonwyatt.sqliteperf.TestCase;
import co.jasonwyatt.sqliteperf.blobs.DbHelper;

/**
 * @author jason
 */

public class RawQueryTestCase implements TestCase {
    private final int mTestSizeIndex;
    private DbHelper mDbHelper;
    private final int mFileSize;
    private final int mFiles;

    public RawQueryTestCase(int fileSize, int files, int testSizeIndex) {
        mFileSize = fileSize;
        mFiles = files;
        mTestSizeIndex = testSizeIndex;
    }

    @Override
    public void resetCase() {
        mDbHelper.close();
        App.getInstance().deleteDatabase(getClass().getSimpleName());
    }

    @Override
    public Metrics runCase() {
        mDbHelper = new DbHelper(App.getInstance(), getClass().getSimpleName(), mFileSize, mFiles);
        Metrics result = new Metrics(getClass().getSimpleName()+" ("+mFileSize+" blob size, "+mFiles+" blobs)", mTestSizeIndex);
        SQLiteDatabase db = mDbHelper.getReadableDatabase();

        String[] fileNames = Arrays.copyOf(mDbHelper.getFileNames(), mDbHelper.getFileNames().length);
        List<String> fileList = Arrays.asList(fileNames);
        Collections.shuffle(fileList, new Random());
        fileNames = fileList.toArray(fileNames);

        result.started();
        String[] selectionArgs = new String[1];
        for (int i = 0; i < mFiles; i++) {
            selectionArgs[0] = fileNames[i];
            Cursor c = db.rawQuery("SELECT data FROM files WHERE filename = ?", selectionArgs);
            try {
                c.moveToNext();
                byte[] data = c.getBlob(0);
            } finally {
                c.close();
            }
        }
        result.finished();
        return result;
    }
}