package com.github.twocoffeesoneteam.glidetovectoryou;

import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.PictureDrawable;
import android.net.Uri;
import androidx.annotation.NonNull;
import android.view.View;
import android.widget.ImageView;

import com.bumptech.glide.RequestBuilder;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.target.SimpleTarget;
import com.bumptech.glide.request.transition.Transition;

public class GlideToVectorYou {

    private static GlideToVectorYou instance;

    private RequestBuilder<PictureDrawable> requestBuilder;
    private int placeHolderLoading = -1;
    private int placeHolderError = -1;

    public static GlideToVectorYou init(){
        if (instance == null) {
            instance = new GlideToVectorYou();
        }

        return instance;
    }

    public GlideToVectorYou with(Context ctx){
        createRequestBuilder(ctx);

        return instance;
    }

    public GlideToVectorYou withListener(GlideToVectorYouListener listener) {
        requestBuilder.listener(new SvgSoftwareLayerSetter(listener));

        return instance;
    }

    public GlideToVectorYou setPlaceHolder(int placeHolderLoading, int placeHolderError) {
        this.placeHolderError = placeHolderError;
        this.placeHolderLoading = placeHolderLoading;

        return instance;
    }

    public void load(Uri uri, ImageView imageView) {
        if (placeHolderLoading != -1 && placeHolderError != -1) {
            requestBuilder.apply(
                    new RequestOptions()
                            .placeholder(placeHolderLoading)
                            .error(placeHolderError)
            );
        }

        requestBuilder.load(uri).into(imageView);

    }

    public static void justLoadImage(Activity activity, Uri uri, ImageView imageView){
        GlideApp.with(activity)
                .as(PictureDrawable.class)
                .listener(new SvgSoftwareLayerSetter()).load(uri).into(imageView);
    }

    public static void justLoadImageAsBackground(Activity activity, Uri uri, final View view) {
        GlideApp.with(activity).load(uri).into(new SimpleTarget<Drawable>() {
            @Override
            public void onResourceReady(@NonNull Drawable resource, Transition<? super Drawable> transition) {
                view.setBackground(resource);
            }
        });
    }

    public RequestBuilder<PictureDrawable> getRequestBuilder() {
        return requestBuilder;
    }

    private void createRequestBuilder(Context ctx){
        requestBuilder = GlideApp.with(ctx)
                .as(PictureDrawable.class)
                .diskCacheStrategy(DiskCacheStrategy.DATA)
                .listener(new SvgSoftwareLayerSetter());
    }

}