package org.plezervikt.dataexamples;

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

import java.util.ArrayList;

/**
 * Created by coelho on 2014.11.12..
 */
public class Database {

    private DatabaseHelper helper;
    private SQLiteDatabase database;

    public Database(Context context) {
        helper = new DatabaseHelper(context);
    }

    private void open() {
        database = helper.getWritableDatabase();
    }

    private void close() {
        database.close();
    }

    public void insertData(String name, int height, boolean openClose) {
        if(openClose) open();
        ContentValues values = new ContentValues();
        values.put(DatabaseHelper.COLUMN_NAME, name.replaceAll("'", "\\'"));
        values.put(DatabaseHelper.COLUMN_HEIGHT, height);

        database.insert(DatabaseHelper.TABLE_NAME, null, values);

//        database.insertOrThrow(DatabaseHelper.TABLE_NAME, null, values);
        if(openClose) close();
    }

    public void updateHeight(String name, int height) {
        open();
        ContentValues values = new ContentValues();
        values.put(DatabaseHelper.COLUMN_HEIGHT, height);

        database.update(DatabaseHelper.TABLE_NAME, values, DatabaseHelper.COLUMN_NAME + " = ?", new String[] {name});
        close();
    }

    public ArrayList<Info> getAllInfo() {
        open();
        Cursor cursor = database.query(DatabaseHelper.TABLE_NAME, null, null, null, null, null, null);

        ArrayList<Info> result = new ArrayList<Info>();

        for(cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
            String name = cursor.getString(cursor.getColumnIndex(DatabaseHelper.COLUMN_NAME));
            int height = cursor.getInt(cursor.getColumnIndex(DatabaseHelper.COLUMN_HEIGHT));

            result.add(new Info(name, height));
        }

        cursor.close();
        close();

        return result;
    }

    public int getHeightOfSomebody(String name) {
        open();
        Cursor cursor = database.query(DatabaseHelper.TABLE_NAME, new String[] { DatabaseHelper.COLUMN_HEIGHT}, DatabaseHelper.COLUMN_NAME + " = ?", new String[] { name }, null, null, null);
        int info = -1;
        if(cursor.getCount() != 0) {
            cursor.moveToNext();
            info = cursor.getInt(cursor.getColumnIndex(DatabaseHelper.COLUMN_HEIGHT));
        }

        cursor.close();
        close();

        return info;
    }

    public void bunchInfoInsert(ArrayList<Info> infos) {
        open();
        database.beginTransaction();
        try {
            for(Info info : infos) {
                insertData(info.getName(), info.getHeight(), false);
            }
            database.setTransactionSuccessful();
        } finally {
            database.endTransaction();
        }
        close();
    }

























}
