/***********************************************************************************************************
 * Name         : EmailUtils
 * Purpose      : Helper methods related to Emails
 **********************************************************************************************************/

public with sharing class EmailUtils {
    public static final String INVALID_SUFFIX = '.invalid';

    /**
     * @description Identifies whether we are in a sandbox or in a prod instance
     * @return Boolean true when in a sandbox, false when in a prod org.
     */
    public static Boolean isSandbox() {
        System.Domain domain = System.DomainParser.parse(URL.getOrgDomainUrl());
        return domain.getSandboxName() != null;
    }

    /**
     * @description Adds a recipient to the list of recipients. It ensures no real email 
     *  addresses are used when we are in a sandbox by appending an invalid suffix
     * @param List<String>  list of recipients
     * @param String  email address to add
     */
    public static void addRecipient(List<String> recipients, String recipientToAdd) {
        if (String.isNotBlank(recipientToAdd)) {
            recipientToAdd = isSandbox() ? recipientToAdd + INVALID_SUFFIX : recipientToAdd;
            recipients.add(recipientToAdd);
        }
    }

    /**
     * @description Removes a list of recipients from the original recipients list
     * @param List<String>  list of original recipients
     * @param List<String>  list of recipients to remove
     * @return List<String> filtered recipients list
     */
    public static List<String> removeRecipient(List<String> recipients, List<String> recipientsToRemove) {
        List<String> filteredRecipients = new List<String>();
        for (String recipient : recipients) {
            if (!recipientsToRemove.contains(recipient)) {
                filteredRecipients.add(recipient);
            }
        }
        return filteredRecipients;
    }
}
