package com.moonmiles.bridge.apm.service.generosity;

import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReadableMap;
import com.moonmiles.apmservices.model.APMGenerosities;
import com.moonmiles.apmservices.model.APMGenerosity;
import com.moonmiles.apmservices.net.APMException;
import com.moonmiles.apmservices.sdk.generosity.APMGenerosityListListener;
import com.moonmiles.apmservices.sdk.generosity.APMGenerosityRemoveListener;
import com.moonmiles.apmservices.sdk.generosity.APMGenerositySaveListener;
import com.moonmiles.apmservices.sdk.generosity.APMServicesGenerosity;
import com.moonmiles.bridge.apm.APMConstants;
import com.moonmiles.bridge.apm.abs.APMReactContextBaseJavaModule;
import com.moonmiles.bridge.apm.utils.APMBridgeUtils;

import java.util.HashMap;
import java.util.Map;

public class APMServicesGenerosityModule extends APMReactContextBaseJavaModule
{

    public APMServicesGenerosityModule(ReactApplicationContext reactContext)
    {
        super(reactContext);
    }

    @ReactMethod
    public static void generosityList(String classId, final Promise promise)
    {
        try
        {
            APMServicesGenerosity.generosityList(classId, new APMGenerosityListListener()
            {
                @Override
                public void generosityListSuccess(APMGenerosities generosities)
                {
                    APMBridgeUtils.resolvePromise(generosities, promise);
                }

                @Override
                public void failure(APMException e)
                {
                    APMBridgeUtils.rejectPromise(e, promise);
                }
            });
        }
        catch(Exception e)
        {
            e.printStackTrace();
            APMBridgeUtils.rejectPromise(e, promise);
        }
    }

    @ReactMethod
    public static void generositySave(ReadableMap generosity, int value, int frequency, final Promise promise)
    {
        try
        {
            APMGenerosity apmGenerosity = new APMGenerosity();
            apmGenerosity.updateWithJSONObject(APMBridgeUtils.convertMapToJson(generosity));
            APMServicesGenerosity.generositySave(apmGenerosity, value, frequency, new APMGenerositySaveListener()
            {
                @Override
                public void generositySaveSuccess(APMGenerosity generosity)
                {
                    APMBridgeUtils.resolvePromise(generosity, promise);
                }

                @Override
                public void failure(APMException e)
                {
                    APMBridgeUtils.rejectPromise(e, promise);
                }
            });
        }
        catch(Exception e)
        {
            e.printStackTrace();
            APMBridgeUtils.rejectPromise(e, promise);
        }
    }

    @ReactMethod
    public static void generosityRemove(ReadableMap generosity, final Promise promise)
    {
        try
        {
            APMGenerosity apmGenerosity = new APMGenerosity();
            apmGenerosity.updateWithJSONObject(APMBridgeUtils.convertMapToJson(generosity));
            APMServicesGenerosity.generosityRemove(apmGenerosity, new APMGenerosityRemoveListener()
            {
                @Override
                public void generosityRemoveSuccess(APMGenerosity generosity)
                {
                    APMBridgeUtils.resolvePromise(generosity, promise);
                }

                @Override
                public void failure(APMException e)
                {
                    APMBridgeUtils.rejectPromise(e, promise);
                }
            });
        }
        catch(Exception e)
        {
            e.printStackTrace();
            APMBridgeUtils.rejectPromise(e, promise);
        }
    }

    @Override
    public String getName() { return "APMServicesGenerosityModule"; }

    @Override
    public Map<String, Object> getConstants()
    {
        final Map<String, Object> constants = new HashMap<>();
        return constants;
    }
}
