package com.reactlibrary;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;

import androidx.annotation.NonNull;

import com.appodeal.ads.Appodeal;
import com.appodeal.ads.NativeAd;
import com.appodeal.ads.native_ad.views.NativeAdViewAppWall;
import com.appodeal.ads.native_ad.views.NativeAdViewContentStream;
import com.facebook.react.uimanager.SimpleViewManager;
import com.facebook.react.uimanager.ThemedReactContext;
import com.facebook.react.uimanager.annotations.ReactProp;

import java.util.List;

public class NativeAdViewNewsAppWall extends SimpleViewManager<NativeAdViewAppWall>  {

    public static final String REACT_CLASS = "RNNativeAdViewAppWall";
    NativeAdViewAppWall nativeAdViewAppWall;
    NativeAd nativeAd;
    int nativeAdIndex = 0;

    @NonNull
    @Override
    public String getName() {
        return REACT_CLASS;
    }

    @NonNull
    @Override
    protected NativeAdViewAppWall createViewInstance(@NonNull ThemedReactContext themedReactContext) {
        LayoutInflater inflater = (LayoutInflater) themedReactContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        nativeAdViewAppWall = (NativeAdViewAppWall) inflater.inflate(R.layout.native_ad_view_app_wall, null);
        return nativeAdViewAppWall;
    }

    @ReactProp(name = "index", defaultInt = 0)
    public void setIndex(NativeAdViewAppWall view, int index) {
        nativeAdIndex = index;
    }

    @ReactProp(name = "isLoaded", defaultBoolean = false)
    public void setIsLoaded(NativeAdViewAppWall view, Boolean isLoaded) {
        if (isLoaded) {
            int count = Appodeal.getAvailableNativeAdsCount();
            if (count > 0) {
                List<NativeAd> list = Appodeal.getNativeAds(1);
                nativeAd = list.get(count > nativeAdIndex ? nativeAdIndex : 0);
                view.setNativeAd(nativeAd);
                view.post(measureAndLayout);
            }
        } else {
            if (nativeAd != null) nativeAd.destroy();
            view.post(measureAndLayout);
        }
    }

    private final Runnable measureAndLayout = new Runnable() {
        @Override
        public void run() {
            nativeAdViewAppWall.measure(
                    View.MeasureSpec.makeMeasureSpec(nativeAdViewAppWall.getWidth(), View.MeasureSpec.EXACTLY),
                    View.MeasureSpec.makeMeasureSpec(nativeAdViewAppWall.getHeight(), View.MeasureSpec.EXACTLY));
            nativeAdViewAppWall.layout(nativeAdViewAppWall.getLeft(), nativeAdViewAppWall.getTop(), nativeAdViewAppWall.getRight(), nativeAdViewAppWall.getBottom());
        }
    };
}
