package com.waveVisual;

import androidx.annotation.Nullable;

import android.util.Log;

import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.Callback;
import com.facebook.react.bridge.LifecycleEventListener;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.modules.core.DeviceEventManagerModule;
import com.facebook.react.uimanager.SimpleViewManager;
import com.facebook.react.uimanager.ThemedReactContext;
import com.facebook.react.uimanager.annotations.ReactProp;
import com.audioDroid.WaveformView;

import static com.facebook.react.common.ReactConstants.TAG;

public class WaveVisualModule extends SimpleViewManager<TSJWaveView> implements LifecycleEventListener, WaveformView.WaveformListener {

    private Callback onPressCallback;
    public static final String REACT_CLASS = "OGWave";
    private ReactContext mcontext;

    @Override
    public String getName() {
        return REACT_CLASS;
    }

    @Override
    public TSJWaveView createViewInstance(ThemedReactContext context) {
        context.addLifecycleEventListener(this);
        mcontext = context;

        // deleteFiles(Environment.getExternalStorageDirectory().toString(),"mp3");
        TSJWaveView mWaveView = new TSJWaveView(context);

        mWaveView.setWaveformListener(this);


        return mWaveView;
    }

    @Override
    public void setTestId(TSJWaveView view, String testId) {
        super.setTestId(view, testId);
        Log.e("XSXGOT", "TTTTTTTTTT::: " + testId);
    }

    @ReactProp(name = "src")
    public void setSrc(TSJWaveView view, @Nullable ReadableMap src) {
        view.setURI(src.getString("uri"));
    }

    @ReactProp(name = "componentID")
    public void setComponentID(TSJWaveView view, String componentID) {
        Log.e("XSXGOT", "componentID SETTED:::" + componentID);
        view.setComponentID(componentID);

    }


    @ReactProp(name = "autoPlay", defaultBoolean = false)
    public void setAutoPlay(TSJWaveView view, boolean autoPlay) {
        Log.e("XSXSXS", "setAutoPlay:::: " + autoPlay);
        view.setAutoPlay(autoPlay);
    }


    @ReactProp(name = "waveFormStyle")
    public void setWaveFormStyle(TSJWaveView view, @Nullable ReadableMap waveFormStyle) {


        view.setmWaveColor(waveFormStyle.getInt("ogWaveColor"));
        view.setScrubColor(waveFormStyle.getInt("ogScrubColor"));
    }

    @ReactProp(name = "play")
    public void setPlay(TSJWaveView view, @Nullable boolean play) {

        view.onPlay(play);

    }

    @Override
    public void onHostResume() {

    }

    @Override
    public void onHostPause() {

    }

    @Override
    public void onHostDestroy() {

    }

    private void sendEvent(ReactContext reactContext,
                           String eventName,
                           @Nullable WritableMap params) {
        reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(eventName, params);
    }

    @Override
    public void waveformTouchStart(ReactContext context, String componentID) {

        WritableMap map = Arguments.createMap();
        map.putString("componentID", componentID);
        sendEvent(context, "OGOnPress", map);
        Log.e("OGTAGDEBUG::", "waveformTouchStart: ");

    }

    @Override
    public void waveformFinishPlay(ReactContext context, String componentID) {

        WritableMap map = Arguments.createMap();
        map.putString("componentID", componentID);
        sendEvent(context, "OGFinishPlay", map);
        Log.e("OGTAGDEBUG::", "waveformFinishPlay: ");

    }

    @Override
    public void waveformTouchStart(float x) {

    }

    @Override
    public void waveformTouchMove(float x) {

    }

    @Override
    public void waveformTouchEnd() {

    }

    @Override
    public void waveformFling(float x) {

    }

    @Override
    public void waveformDraw() {

    }

    @Override
    public void waveformZoomIn() {

    }

    @Override
    public void waveformZoomOut() {

    }
}
