package com.github.gotify.picasso;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Base64;
import com.github.gotify.log.Log;
import com.squareup.picasso.Picasso;
import com.squareup.picasso.Request;
import com.squareup.picasso.RequestHandler;

/**
 * Adapted from https://github.com/square/picasso/issues/1395#issuecomment-220929377 By
 * https://github.com/SmartDengg
 */
public class PicassoDataRequestHandler extends RequestHandler {

    private static final String DATA_SCHEME = "data";

    @Override
    public boolean canHandleRequest(Request data) {
        String scheme = data.uri.getScheme();
        return DATA_SCHEME.equalsIgnoreCase(scheme);
    }

    @Override
    public Result load(Request request, int networkPolicy) {
        String uri = request.uri.toString();
        String imageDataBytes = uri.substring(uri.indexOf(",") + 1);
        byte[] bytes = Base64.decode(imageDataBytes.getBytes(), Base64.DEFAULT);
        Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);

        if (bitmap == null) {
            String show = uri.length() > 50 ? uri.substring(0, 49) + "..." : uri;
            RuntimeException malformed = new RuntimeException("Malformed data uri: " + show);
            Log.e("Could not load image", malformed);
            throw malformed;
        }

        return new Result(bitmap, Picasso.LoadedFrom.NETWORK);
    }
}