package com.billy.android.loadingstatusview.wrapfragment;

import android.app.Fragment;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import com.billy.android.loading.Gloading;
import com.billy.android.loadingstatusview.BaseActivity;
import com.billy.android.loadingstatusview.util.Util;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.DataSource;
import com.bumptech.glide.load.engine.GlideException;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.target.Target;

import static com.billy.android.loadingstatusview.util.Util.getRandomImage;

/**
 * demo for wrap fragment
 *
 * You can wrap a BaseFragment like {@link BaseActivity}
 *
 * @author billy.qi
 * @since 19/3/21 17:23
 */
public class WrapRootViewFragment extends Fragment {
    private Gloading.Holder holder;
    private ImageView imageView;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        imageView = new ImageView(inflater.getContext());
        holder = Gloading.getDefault().wrap(imageView).withRetry(new Runnable() {
            @Override
            public void run() {
                //change picture url to a correct one
                loadImage(getRandomImage());
            }
        });
        //demo load failed with an error image url
        loadImage(Util.getErrorImage());
        return holder.getWrapper();
    }

    private void loadImage(String picUrl) {
        holder.showLoading();
        Glide.with(this)
                .load(picUrl)
                .listener(new RequestListener<Drawable>() {
                    @Override
                    public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                        holder.showLoadFailed();
                        return false;
                    }

                    @Override
                    public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                        holder.showLoadSuccess();
                        return false;
                    }
                })
                .into(imageView);
    }

}