package net.ihe.xcpd.resp.action;

import net.ihe.gazelle.simulator.common.model.ApplicationConfiguration;
import net.ihe.xcpd.resp.process.MessageResponder;

import org.hl7.v3.PRPAIN201305UV02;
import org.hl7.v3.PRPAIN201306UV02;

import gazelle.ihe.net.hl7.translator.PDQRequestV3ToV2Translator;
import gazelle.ihe.net.hl7.translator.PDQResponseV2ToV3Translator;

/**
 * 
 * @author abderrazek boufahja
 *
 */
public class XCPDResponder {
    
    public XCPDResponder(){
    }
    
    public static String transformHL7V3ToHL7V2(String requestV3) throws Exception{
        String requestV2 = null;
        if (requestV3 != null){
            if (requestV3.equals("")){
                requestV2 = null;
                return null;
            }
            String req = PDQRequestV3ToV2Translator.translateRequestV3ToV2(requestV3);
            requestV2 = req;
        }
        return requestV2;
    }
    
    public static String transformV2ToV3(String requestV3, String responseV2) throws Exception{
        String responseV3 = null;
        if ((responseV2 != null) && (requestV3 != null)){
            responseV2 = responseV2.replace("\n", "\r");
            responseV2 = responseV2.replace("\r\r", "\r");
            String systemRootId = ApplicationConfiguration.getValueOfVariable("system_id_root");
            String res = PDQResponseV2ToV3Translator.translateResponseV2ToV3(responseV2, requestV3, systemRootId);
            responseV3 = res;
        }
        return responseV3;
    }
    
    public static PRPAIN201306UV02 getResponseOfRequest(PRPAIN201305UV02 requestV3) throws Exception{
        String requestV3String = StringTransformer.PRPAIN201305UV02ToString(requestV3);
        String responseV3 = XCPDResponder.getResponseOfRequest(requestV3String);
        PRPAIN201306UV02 res = StringTransformer.String2PRPAIN201306UV02(responseV3);
        return res;
    }
    
    public static String getResponseOfRequest(String requestV3String) throws Exception{
        String responseV3 = null;
        if (requestV3String != null){
            String requestV2 = XCPDResponder.transformHL7V3ToHL7V2(requestV3String);
            String process = ApplicationConfiguration.getValueOfVariable("process");
            if (process.toLowerCase().equals("complete")){
                MessageResponder mr = new MessageResponder();
                String responseV2 = mr.getResponseStringForMessage(requestV2);
                responseV3 = XCPDResponder.transformV2ToV3(requestV3String, responseV2);
            }
            else{
                String serverHostName = ApplicationConfiguration.getValueOfVariable("pds_server_name");
                String serverPort = ApplicationConfiguration.getValueOfVariable("pds_server_port");
                String responseV2 = PDCConnector.sendHl7Message(requestV2, serverHostName, Integer.valueOf(serverPort));
                responseV3 = XCPDResponder.transformV2ToV3(requestV3String, responseV2);
            }
        }
        return responseV3;
    }

}
