package tw.com.ischool.grasshopper;

import android.util.Log;

import com.facebook.react.bridge.Callback;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;

import org.w3c.dom.Element;

import tw.com.ischool.firefly.util.XmlHelper;
import tw.com.ischool.grasshopper.modoles.UserInfo;

public class RNDSAModule extends ReactContextBaseJavaModule {

    public RNDSAModule(ReactApplicationContext context) {
        super(context);
    }

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

    UserInfo userInfo = RoleManager.getsInstance(getReactApplicationContext()).getCurrentUser();

    // dsns
    private String dsns = userInfo.getApp().getDsns();

    // 取得發送訊息清單
    @ReactMethod
    public void call(String contract, String serviceName, String body, final Callback cb) {

        try {
            Element request = XmlHelper.parseXml(body);
            String response = DSAUtil.callServiceInternal(getReactApplicationContext(), dsns, contract, serviceName, request);

            Element env = XmlHelper.parseXml(response);
            Element rspCode = XmlHelper.selectElement(env, "Header/Status/Code");
            Element rspMessage = XmlHelper.selectElement(env, "Header/Status/Message");
            Element rspBody = XmlHelper.selectElement(env, "Body");

            if(rspCode != null && !rspCode.getTextContent().equals("0")) {
                // 這裡的 error 需要與 iOS 相同格式，否則會炸很大。
                String errorstr = String.format("<error><code>%s</code><message>%s</message></error><Envelope>%s</Envelope>%s",rspCode.getTextContent(), rspMessage.getTextContent(), body, response);
                cb.invoke(errorstr, null);
            } else {
                cb.invoke(null, XmlHelper.convertToString(rspBody));
            }

        } catch (Exception e) {
            Log.d("1campus", e.getLocalizedMessage());
        }
    }
}
