package com.devddagnet.bright.sample;

import com.devddagnet.bright.lib.Bright;
import com.squareup.picasso.Callback;
import com.squareup.picasso.Picasso;
import com.squareup.picasso.Transformation;

import android.graphics.Bitmap;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import static com.devddagnet.bright.lib.Bright.Config;

public class PictureFragment extends Fragment implements Transformation, Callback {

    private static final String TAG = "BRIGHT";

    TextView[] labels     = new TextView[5];
    int[] luminances = new int[5];
    ImageView mPicture;
    Bright.Luminance bright = Bright.setup(Config.PERCEIVED | Config.PERFORMANCE);

    public PictureFragment() {
    }

    public static PictureFragment newInstance(String url) {
        PictureFragment fragment = new PictureFragment();
        Bundle bundle = new Bundle();

        bundle.putString("url", url);
        fragment.setArguments(bundle);
        return fragment;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_picture, container, false);

        labels[0] = (TextView) rootView.findViewById(R.id.label);
        labels[1] = (TextView) rootView.findViewById(R.id.label2);
        labels[2] = (TextView) rootView.findViewById(R.id.label3);
        labels[3] = (TextView) rootView.findViewById(R.id.label4);
        labels[4] = (TextView) rootView.findViewById(R.id.label5);
        mPicture = (ImageView) rootView.findViewById(R.id.picture);

        final String url = getArguments().getString("url");

        Picasso.with(getActivity()).load(url).config(Bitmap.Config.RGB_565)
                .fit().centerCrop()
                .transform(this)
                .into(mPicture, this);
        return rootView;
    }

    @Override
    public void onSuccess() {
        Log.d(TAG, "Success");

        for (int i = 0; i < labels.length; ++i) {
            int luminance = luminances[i];
            TextView label = labels[i];
            final int textColor = bright.isBright(luminance) ? Color.BLACK
                    : Color.WHITE;

            label.setTextColor(textColor);
            label.setText("Bright (" + (int) luminance + ")");
        }
    }

    @Override
    public void onError() {
        Log.d(TAG, "Error");
    }

    @Override
    public Bitmap transform(Bitmap source) {
        for (int i = 0; i < labels.length; ++i) {
            TextView label = labels[i];

            int x = (int) label.getX();
            int y = (int) label.getY();
            int width = label.getWidth();
            int height = label.getHeight();

            Bitmap dest = Bitmap.createBitmap(source, x, y, width, height);
            luminances[i] = bright.brightness(dest);
            dest.recycle();
        }
        return source;
    }

    @Override
    public String key() {
        return TAG;
    }
}