package com.fitbank.bpm.common;

import com.fitbank.common.RequestData;
import com.fitbank.common.exception.FitbankException;
import com.fitbank.common.logger.FitbankLogger;
import com.fitbank.dto.management.Detail;
import com.fitbank.dto.management.Field;

/**
 * 
 * @author pedro
 */
public class ExecuteTransactionCancel extends AbstractFitSend {
    public Detail execute(Detail pDetail, String pSubsystem, String pTransaction, String pVersion) throws Exception {
        try {
            this.setDetailHeader(pDetail, pSubsystem, pTransaction, pVersion);
            pDetail = this.send(pDetail);
        } catch (FitbankException e) {
            FitbankLogger.getLogger().warn(e, e);
            throw e;
        } catch (Exception e) {
            FitbankLogger.getLogger().warn(e, e);
            throw e;
        }
        return pDetail;
    }

    private void setDetailHeader(Detail pDetail, String pSubsystem, String pTransaction, String pVersion)
            throws Exception {

        // pDetail.setMessageid(MessageIdGenerator.getInstance().generateId(pDetail.getChannel())); //Este difiere del
        // executetransaction
        pDetail.setSubsystem(pSubsystem);
        pDetail.setTransaction(pTransaction);
        pDetail.setVersion(pVersion);
        pDetail.setSessionid(RequestData.getDetail().getSessionid());
        pDetail.setTerminal(RequestData.getDetail().getTerminal());
        pDetail.setUser(RequestData.getDetail().getUser());
        pDetail.setType("MAN");

        for (Field f : pDetail.getFields()) {
            if ((f.getName().compareTo("RESPONSE") == 0) || (f.getName().indexOf("_USER_") == 0)
                    || (f.getName().compareTo("_AUT_ESTADO") == 0)) {
                f.setValue(null);
            }
        }
    }

}
