package com.pinelabs;

import com.pinelabs.model.EncryptionPojo;
import com.pinelabs.service.EncryptionService;
import com.pinelabs.service.EncryptionServiceImpl;

import java.util.Map;
import java.util.logging.*;
public class DesSimulator {
    private static final Logger logger = Logger.getLogger(DesSimulator.class.getName());

    public static void main(String[] args) throws Exception {

        String result = null;
      

        if (args.length != 2) {
            throw new Exception("Invalid number of arguments for Encryption");
        }

        
        String keyFile = System.getProperty("KEY_FILE");
        String publicKeyInfo = System.getProperty("KEY_INFO");
            


        if (publicKeyInfo.isEmpty() || keyFile.isEmpty()){
            throw new Exception("key file information is missing");
        }

        EncryptionPojo encPojo = new EncryptionPojo();
        EncryptionService service = new EncryptionServiceImpl();
        populatePojo(args, encPojo);

        String pinBlock = service.processPinBlock(encPojo);
        encPojo.setSourceBlock(pinBlock);

        Map<String, String> map  = service.processEncryption(encPojo);
        System.out.println(map.get("data"));
    }

    private static void populatePojo(String[] args, EncryptionPojo encPojo) throws Exception {

        //  System.out.println(Arrays.toString((Object[])args));

        encPojo.setEncodingType("hex");  // hex or base64
        encPojo.setKeyLength(112);      // 168 or 112
        encPojo.setIsUnicodeRequest("false"); // false
        encPojo.setIsPinRequestV("true"); // true / false
        encPojo.setIsTimeStampV("false");  // true /false
        encPojo.setPlainData("{ }"); // JSON data
        encPojo.setDeviceNumber(args[0]);   // device number
        encPojo.setClearPin(args[1]);   // clear pin
    }
}
