package net.gepafin.tendermanagement.dao; import java.util.HashMap; import java.util.Locale; import java.util.Map; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import net.gepafin.tendermanagement.entities.HubEntity; import net.gepafin.tendermanagement.entities.SystemEmailTemplatesEntity; import net.gepafin.tendermanagement.entities.SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum; import net.gepafin.tendermanagement.model.response.SystemEmailTemplateResponse; import net.gepafin.tendermanagement.repositories.SystemEmailTemplatesRespository; import net.gepafin.tendermanagement.util.Utils; @Component public class SystemEmailTemplatesDao { @Autowired private SystemEmailTemplatesRespository systemEmailTemplatesRespository; @Value("${fe.base.url}") private String feBaseUrl; @Value("${default.email.signature}") private String defaultEmailSignature; public SystemEmailTemplateResponse retrieveTemplate(SystemEmailTemplatesEntityTypeEnum type, HubEntity hub, Locale language) { SystemEmailTemplatesEntity dbSystemEmailTemplatesEntity = null; if(hub != null){ // dbSystemEmailTemplatesEntity = systemEmailTemplatesRespository // .findByTypeAndCallId(type.getValue(), call.getId()); } if(dbSystemEmailTemplatesEntity == null) { dbSystemEmailTemplatesEntity = systemEmailTemplatesRespository .findByType(type.getValue()); } SystemEmailTemplateResponse systemEmailTemplateResponse = replaceHtmlContant(dbSystemEmailTemplatesEntity, hub, language, Boolean.TRUE); return systemEmailTemplateResponse; } private SystemEmailTemplateResponse replaceHtmlContant(SystemEmailTemplatesEntity dbSystemEmailTemplatesEntity, HubEntity hub, Locale language1, Boolean isDefaultReplace) { String language = null; String htmlContent = dbSystemEmailTemplatesEntity.getHtmlContent(); String subject = dbSystemEmailTemplatesEntity.getSubject(); if (language1 == null) { // language = getLanguage(LocaleContextHolder.getLocale()); language="italian"; }else{ language="italian"; } Map languageMap = new HashMap<>(); String jsonContent = dbSystemEmailTemplatesEntity.getJson(); if (Boolean.FALSE.equals(StringUtils.isEmpty(jsonContent))) { Map> jsonMap = Utils.parseJsonContent(jsonContent); if (jsonMap != null && jsonMap.containsKey(language)) { languageMap = jsonMap.get(language); htmlContent = replacePlaceholders(htmlContent, languageMap); subject = replaceSubjectPlaceholders(subject, languageMap); } } if(Boolean.TRUE.equals(StringUtils.isEmpty(subject))){ subject = ""; } htmlContent = replacePlatformLinkPlaceholderAndEmailSignature(hub, htmlContent, languageMap); subject = replacePlatformLinkPlaceholderAndEmailSignature(hub, subject, languageMap); SystemEmailTemplateResponse systemEmailTemplateResponse = new SystemEmailTemplateResponse(); systemEmailTemplateResponse.setHtmlContent(htmlContent); systemEmailTemplateResponse.setSubject(subject); systemEmailTemplateResponse.setJsonMap(languageMap); return systemEmailTemplateResponse; } // private String getLanguage(Locale locale) { // return switch (locale.getLanguage()) { // case "en" -> "english"; // case "it" -> "italian"; // default -> "italian"; // }; // } private String replacePlaceholders(String htmlContent, Map languageMap) { for (Map.Entry entry : languageMap.entrySet()) { htmlContent = htmlContent.replace("{{" + entry.getKey() + "}}", entry.getValue()); } return htmlContent; } private String replaceSubjectPlaceholders(String subject, Map languageMap) { if(languageMap.containsKey("subject") && subject != null){ String value = languageMap.get("subject"); subject = subject.replace("{{subject}}", value); return subject; } return ""; } private String replacePlatformLinkPlaceholderAndEmailSignature(HubEntity hub, String htmlContent, Map languageMap) { htmlContent = replacePlatformLinkPlaceholder(hub, htmlContent, languageMap); htmlContent = replaceEmailSignature(hub, htmlContent, languageMap); return htmlContent; } private String replaceEmailSignature(HubEntity hub, String htmlContent, Map languageMap) { String emailSignature = defaultEmailSignature; if(hub != null && Boolean.FALSE.equals(StringUtils.isEmpty(hub.getEmailSignature()))){ emailSignature = hub.getEmailSignature(); } return htmlContent.replace("{{email_signature}}", emailSignature); } private String replacePlatformLinkPlaceholder(HubEntity hub, String htmlContent, Map languageMap) { String platformLink = feBaseUrl; if(hub != null && Boolean.FALSE.equals(StringUtils.isEmpty(hub.getDomainName()))){ platformLink = hub.getDomainName(); } return htmlContent.replace("{{platform_link}}", platformLink); } }