import pac1.Bean.acl.main.RestAPITokenValidation;
import pac1.Bean.AsymmetricEncryption;

import java.security.PrivateKey;
import java.security.PublicKey;

public class EncryptDecrypt {
    public static void main(String[] args) {
        if (args.length < 2) {
            System.out.println("Usage: java TokenEncryptDecrypt <encrypt|decrypt> <text>");
            return;
        }

        String mode = args[0];
        String text = args[1];

        try {
            RestAPITokenValidation restApiTokenValidation = new RestAPITokenValidation();
            AsymmetricEncryption encryption = new AsymmetricEncryption();

            if ("encrypt".equalsIgnoreCase(mode)) {
                String publicKeyStr = restApiTokenValidation.getPublicMetaKeyFromMongoDB(restApiTokenValidation.PUBLIC_KEY);
                PublicKey publicKey = encryption.getPublicKeyByStringKey(publicKeyStr);
                String encrypted = encryption.encryptText(text, publicKey);
                System.out.println("Encrypted: " + encrypted);
            } else if ("decrypt".equalsIgnoreCase(mode)) {
                String privateKeyStr = restApiTokenValidation.getPublicMetaKeyFromMongoDB(restApiTokenValidation.PRIVATE_KEY);
                PrivateKey privateKey = encryption.getPrivateKeyByStringKey(privateKeyStr);
                String decrypted = encryption.decryptText(text, privateKey);
                System.out.println("Decrypted: " + decrypted);
            } else {
                System.out.println("Invalid mode. Use 'encrypt' or 'decrypt'.");
            }
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("Error during encryption/decryption: " + e.getMessage());
        }
    }
}
