package com.mobify.astro.plugins.loaders;

import android.graphics.Color;
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.support.annotation.NonNull;
import android.view.View;
import android.widget.ProgressBar;

import com.mobify.astro.AstroActivity;
import com.mobify.astro.AstroPlugin;
import com.mobify.astro.PluginResolver;
import com.mobify.astro.messaging.EventRegistrar;
import com.mobify.astro.messaging.MessageSender;
import com.mobify.astro.messaging.annotations.RpcMethod;

public class DefaultLoaderPlugin extends AstroPlugin implements LoaderPlugin {
    private ProgressBar _loader = null;

    public DefaultLoaderPlugin(@NonNull AstroActivity activity, @NonNull PluginResolver pluginResolver,
                               @NonNull EventRegistrar eventRegistrar, @NonNull MessageSender messageSender) {
        super(activity, pluginResolver, eventRegistrar, messageSender);
    }

    @Override
    public View getView() {
        if (_loader != null) {
            return _loader;
        }

        _loader = new ProgressBar(activity);
        _loader.setIndeterminate(true);
        _loader.setBackgroundColor(Color.TRANSPARENT);
        _loader.setVisibility(View.INVISIBLE);
        return _loader;
    }

    @Override
    public void start() {}

    @Override
    public void stop() {}

    @Override
    public void setUrl(String url) {}

    @RpcMethod(methodName = "setColor", parameterNames = {"color"})
    public void setColor(String color) {
        // ensure view is initialized
        Drawable spinner = ((ProgressBar)this.getView()).getIndeterminateDrawable();

        // Reading on PorterDuff modes: http://ssp.impulsetrain.com/porterduff.html
        spinner.setColorFilter(Color.parseColor(color), PorterDuff.Mode.SRC_IN);
    }

    @RpcMethod(methodName = "setBackgroundColor", parameterNames = {"color"})
    public void setBackgroundColor(String color) {
        /*
            Intentionally left blank to match the Astro API - Loader.setBackgroundColor
            On Android, changing the webview's background color changes the loader's background color
        */
        return;
    }
}
