package com.kimo.lib.alexei;

import android.content.Context;
import android.content.CursorLoader;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.net.Uri;
import android.provider.MediaStore;
import android.widget.ImageView;

import java.io.IOException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;

import static java.lang.Thread.MIN_PRIORITY;

/**
 * Orphan methods
 */
public class Utils {

    public static int [][] getPixelsMatrixFromBitmap(Bitmap bitmap) {

        int [][] pixelMatrix = new int[bitmap.getWidth()][bitmap.getHeight()];

        for(int i = 0; i < bitmap.getWidth(); i++)
            for(int j = 0; j < bitmap.getHeight(); j++)
                pixelMatrix[i][j] = bitmap.getPixel(i,j);

        return pixelMatrix;

    }

    public static Bitmap getBitmapFromImageView(ImageView theImage) {
        return ((BitmapDrawable)theImage.getDrawable()).getBitmap();
    }

    public static Bitmap getBitmapFromURI(Context context, Uri uri) {
        try {
            Bitmap bitmap = MediaStore.Images.Media.getBitmap(context.getContentResolver(), uri);

            return bitmap;
        } catch (IOException e) {
            throw new IllegalArgumentException("Error creating bitmap from URI");
        }
    }

    public String getRealPathFromURI(Context context, Uri contentUri) {
        String[] proj = { MediaStore.Images.Media.DATA };

        //This method was deprecated in API level 11
        //Cursor cursor = managedQuery(contentUri, proj, null, null, null);

        CursorLoader cursorLoader = new CursorLoader(
                context,
                contentUri, proj, null, null, null);
        Cursor cursor = cursorLoader.loadInBackground();

        int column_index =
                cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
    }

    public static ExecutorService getDefaultCalculator() {
        return Executors.newFixedThreadPool(1 , new ThreadFactory() {
            @Override
            public Thread newThread(final Runnable r) {
                return new Thread(new Runnable() {
                    @Override
                    public void run() {
                        Thread.currentThread().setPriority(MIN_PRIORITY);
                        r.run();
                    }
                }, "IdleThread");
            }
        });
    }
}