package com.fitbank.uci.webservice.client;

import javax.xml.namespace.QName;
import javax.xml.rpc.Call;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.Service;
import javax.xml.rpc.ServiceFactory;

public class WSClientRPC {

    private static final String XML_SCHEMA = "http://www.w3.org/2001/XMLSchema";
    private String url = null;
    private String nameSpace = null;
    private String serviceName = null;
    private String portName = null;

    public WSClientRPC(String url, String nameSpace, String serviceName, String portName) {
        this.url = url;
        this.nameSpace = nameSpace;
        this.serviceName = serviceName;
        this.portName = portName;
    }

    public String validarPin(String pan, String pin) {
        String resp = "00";

        try {
            ServiceFactory serviceFactory = ServiceFactory.newInstance();
            Service service = serviceFactory.createService(new QName(this.serviceName));
            Call call = service.createCall();

            call.setTargetEndpointAddress(this.url);
            call.setPortTypeName(new QName(this.nameSpace, this.portName));
            call.setOperationName(new QName(this.nameSpace, "ValidarPinMedianet"));
            call.setProperty(Call.SOAPACTION_USE_PROPERTY, true);
            call.setProperty(call.SOAPACTION_URI_PROPERTY, this.nameSpace + "ValidarPinMedianet");

            QName QNAME_TYPE_STRING = new QName(XML_SCHEMA, "string");

            call.addParameter("numeroTarjeta", QNAME_TYPE_STRING, ParameterMode.IN);
            call.addParameter("pinEncriptado", QNAME_TYPE_STRING, ParameterMode.IN);
            call.setReturnType(QNAME_TYPE_STRING);

            Object[] inParams = new Object[] { pan, pin };

            resp = (String) call.invoke(inParams);
            if (resp.compareTo("0000") == 0) {
                return "00"; //PIN CORRECTO
            } else if (resp.compareTo("8432") == 0) {
                return "55"; //PIN INCORRECTO
            } else {
                return "83"; //IMPOSIBLE VERFICAR EL PIN
            }
        } catch (Exception ex) {
            ex.printStackTrace();
            resp = "83"; //IMPOSIBLE VERFICAR EL PIN
        }
        return resp;
    }

    public static void main(String[] args) {
        String url = "http://132.147.160.39/servicio/validador.asmx";
        String nameSpace = "http://tempuri.org/";
        String serviceName = "Validador";
        String portName = "ValidadorSoap";
        WSClientRPC wsClientPIN = new WSClientRPC(url, nameSpace, serviceName, portName);

        System.out.println(wsClientPIN.validarPin("6009953800101319", "dfbed9de186431eb"));
    }
}
