/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Main.java to edit this template
 */
package swiftgenerator;
import com.prowidesoftware.swift.model.*;
import com.prowidesoftware.swift.model.field.*;
import com.prowidesoftware.swift.model.mt.mt1xx.MT103;

import java.util.Calendar;

/**
 *
 * @author fullj
 */
public class SwiftGenerator {
    /**
     * @param args the command line arguments
     */
    public void generateMT103(String TRN, String currencyX, String amount, String SwiftSender, String SwiftReceiver, String sender_AccountName, String receiver_AccountName, String sender_AccountNumber, String receiver_AccountNumber,String commission){
        /* Command Line Arguments: CURRENCY AMOUNT 
            SWIFTSENDER SWIFTRECEIVER ACCOUNTNAMESENDER 
            ACCOUNTNAMERECEIVER ACCOUNTNUMBERSENDER ACCOUNTNUMBERRECEIVER
               */
        
        final MT103 m = new MT103();
	System.out.println("Commission:" + commission);
        /*
         * Create and set a specific header block 1
         */
        SwiftBlock1 b1 = new SwiftBlock1();
        b1.setApplicationId("F");
        b1.setServiceId("01");
        b1.setLogicalTerminal(SwiftSender);
        b1.setSessionNumber("1234");
        b1.setSequenceNumber("123456");
        m.getSwiftMessage().setBlock1(b1);

        /*
         * Create and set a specific header block 2
         * Notice there are two block 2 headers (for input and output messages)
         */
        SwiftBlock2Input b2 = new SwiftBlock2Input();
        b2.setMessageType("103");
        b2.setReceiverAddress(SwiftReceiver);
        b2.setDeliveryMonitoring("1");
        m.getSwiftMessage().setBlock2(b2);

        /*
         * Add the optional user header block
         */
        SwiftBlock3 block3 = new SwiftBlock3();
        block3.append(new Field119("STP"));
        m.getSwiftMessage().addBlock(block3);

        /*
         * Start adding the message's fields in correct order
         */
        m.addField(new Field20(TRN));
        m.addField(new Field23B("CRED"));

        /*
         * Add a field using comprehensive setters API
         */
        Field32A f32A = new Field32A()
                .setDate(Calendar.getInstance())
                .setCurrency(currencyX)
                .setAmount(amount);
        m.addField(f32A);

        /*
         * Add the orderer field
         */
        Field50A f50A = new Field50A()
                .setAccount(sender_AccountNumber + "\r\n" + sender_AccountName)
                .setBIC(SwiftSender);
        m.addField(f50A);

        /*
         * Add the beneficiary field
         */
        Field59 f59 = new Field59()
                .setAccount(receiver_AccountNumber)
                .setNameAndAddress(receiver_AccountName);
        m.addField(f59);

        /*
         * Add the commission indication
         */
        m.addField(new Field71A(commission));

        /*
         * Add the trailer block (in normal situations this is automatically created by the FIN interface, not by the user/applications)
         */
        SwiftBlock5 block5 = new SwiftBlock5();
        block5.append(new Tag("MAC", "004589312"));
        block5.append(new Tag("PDE", ""));
        m.getSwiftMessage().addBlock(block5);

        /*
         * Add an optional user block
         */
        SwiftBlockUser blockUser = new SwiftBlockUser("S");
        blockUser.append(new Tag("SAC", ""));
        blockUser.append(new Tag("COP", "P"));
        m.getSwiftMessage().addBlock(blockUser);

        /*
         * Create and print out the SWIFT FIN message string
         */
        System.out.println(m.message());
        
    }
    
    public static void main(String[] args) {
        // TODO code application logic here
        System.out.println("SWIFT FIN MESSAGE GENERATOR\r\nCommand Line Arguments: CURRENCY AMOUNT SWIFTSENDER SWIFTRECEIVER ACCOUNTNAMESENDER ACCOUNTNAMERECEIVER ACCOUNTNUMBERSENDER ACCOUNTNUMBERRECEIVER TRN COMMISSION");
        /* Command Line Arguments: CURRENCY AMOUNT SWIFTSENDER SWIFTRECEIVER ACCOUNTNAMESENDER ACCOUNTNAMERECEIVER ACCOUNTNUMBERSENDER ACCOUNTNUMBERRECEIVER TRN COMMISSION
               */
        SwiftGenerator objSwiftGenerator = new SwiftGenerator();
        String currency = args[0];
        String amount = args[1];
        String swiftSender = args[2];
        String swiftReceiver = args[3];
        String sender_AccountName = args[4];
        String receiver_AccountName = args[5];
        String sender_AccountNumber = args[6];
        String receiver_AccountNumber = args[7];
        String TRN = args[8];
		String Commission = args[9];
        objSwiftGenerator.generateMT103(TRN,currency,amount,swiftSender,swiftReceiver,sender_AccountName,receiver_AccountName,sender_AccountNumber,receiver_AccountNumber,Commission);
        
        
    }
    
}
