package suraj.tiwari.reactnativefbads;

import android.graphics.drawable.Icon;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;

import com.facebook.ads.AdChoicesView;
import com.facebook.ads.AdIconView;
import com.facebook.ads.MediaView;
import com.facebook.ads.NativeAd;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.uimanager.ThemedReactContext;
import com.facebook.react.uimanager.events.RCTEventEmitter;
import com.facebook.react.views.view.ReactViewGroup;

import java.util.ArrayList;
import java.util.List;

public class NativeAdView extends ReactViewGroup {
  /**
   * @{NativeAd} received from the ads manager
   **/
  private NativeAd mNativeAd;

  /**
   * @{RCTEventEmitter} instance used for sending events back to JS
   **/
  private RCTEventEmitter mEventEmitter;

  /**
   * Creates new NativeAdView instance and retrieves event emitter
   *
   * @param context
   */
  public NativeAdView(ThemedReactContext context) {
    super(context);

    mEventEmitter = context.getJSModule(RCTEventEmitter.class);
  }

  /**
   * Called by the view manager when adsManager prop is set. Sends serialised
   * version of a native ad back to Javascript.
   *
   * @param nativeAd
   */
  public void setNativeAd(NativeAd nativeAd) {
    if (mNativeAd != null) {
      mNativeAd.unregisterView();
    }

    mNativeAd = nativeAd;

    if (nativeAd == null) {
      mEventEmitter.receiveEvent(getId(), "onAdLoaded", null);
      return;
    }

    WritableMap event = Arguments.createMap();
    event.putString("headline", nativeAd.getAdHeadline());
    event.putString("socialContext", nativeAd.getAdSocialContext());
    event.putString("bodyText", nativeAd.getAdBodyText());
    event.putString("callToActionText", nativeAd.getAdCallToAction());
    event.putString("sponsoredTranslation", nativeAd.getSponsoredTranslation());
    event.putString("advertiserName", nativeAd.getAdvertiserName());
    event.putString("promotedTranslation", nativeAd.getPromotedTranslation());
    event.putString("translation", nativeAd.getAdTranslation());
    event.putString("linkDescription", nativeAd.getAdLinkDescription());

    mEventEmitter.receiveEvent(getId(), "onAdLoaded", event);
  }

  public void registerViewsForInteraction(MediaView mediaView, AdIconView adIconView, List<View> clickableViews) {
    mNativeAd.registerViewForInteraction(this, mediaView, adIconView, clickableViews);
  }

}