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.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 NativeAdViewNewsContentStream extends SimpleViewManager<NativeAdViewContentStream>  {

    public static final String REACT_CLASS = "RNNativeAdViewContentStream";
    NativeAdViewContentStream nativeAdViewContentStream;
    NativeAd nativeAd;
    int nativeAdIndex = 0;

    @NonNull
    @Override
    public String getName() {
        return REACT_CLASS;
    }

    @NonNull
    @Override
    protected NativeAdViewContentStream createViewInstance(@NonNull ThemedReactContext themedReactContext) {
        LayoutInflater inflater = (LayoutInflater) themedReactContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        nativeAdViewContentStream = (NativeAdViewContentStream) inflater.inflate(R.layout.native_ad_view_content_stream, null);
        return nativeAdViewContentStream;
    }

    @ReactProp(name = "index", defaultInt = 0)
    public void setIndex(NativeAdViewContentStream view, int index) {
        nativeAdIndex = index;
    }

    @ReactProp(name = "isLoaded", defaultBoolean = false)
    public void setIsLoaded(NativeAdViewContentStream 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() {
            nativeAdViewContentStream.measure(
                    View.MeasureSpec.makeMeasureSpec(nativeAdViewContentStream.getWidth(), View.MeasureSpec.EXACTLY),
                    View.MeasureSpec.makeMeasureSpec(nativeAdViewContentStream.getHeight(), View.MeasureSpec.EXACTLY));
            nativeAdViewContentStream.layout(nativeAdViewContentStream.getLeft(), nativeAdViewContentStream.getTop(), nativeAdViewContentStream.getRight(), nativeAdViewContentStream.getBottom());
        }
    };
}
