package com.zioinfo.kintex.mail;

/**
 * 짧은 HTML 메일 본문 템플릿. 인라인 스타일 최소·외부 리소스 없음. 본문은 저장하지 않는다(mail_log 는 제목만).
 * 정보통신망법: 광고성(EDM)에는 수신거부 안내 문구를 하단에 포함한다.
 */
public final class MailTemplates {

    private MailTemplates() {
    }

    private static final String WRAP_HEAD =
            "<div style=\"font-family:'Pretendard',Arial,sans-serif;max-width:560px;margin:0 auto;"
                    + "color:#1f2937;line-height:1.6\">";
    private static final String WRAP_FOOT =
            "<hr style=\"border:none;border-top:1px solid #e5e7eb;margin:24px 0 12px\">"
                    + "<p style=\"font-size:12px;color:#9ca3af\">KINTEX 전시운영 시스템 · 본 메일은 발신 전용입니다.</p></div>";

    /** 옥션 개설 통지(공사업체 대상) — 행사명·옥션 제목·마감·자료 열람 링크. */
    public static String auctionOpened(String eventName, String auctionTitle, String deadline, String link) {
        return WRAP_HEAD
                + "<h2 style=\"font-size:18px\">새 공사 옥션이 개설되었습니다</h2>"
                + "<p><strong>행사</strong> " + esc(eventName) + "</p>"
                + "<p><strong>옥션</strong> " + esc(auctionTitle) + "</p>"
                + "<p><strong>응찰 마감</strong> " + esc(deadline) + "</p>"
                + "<p style=\"margin-top:16px\"><a href=\"" + esc(link) + "\" "
                + "style=\"display:inline-block;background:#1f29fc;color:#fff;padding:10px 18px;"
                + "border-radius:8px;text-decoration:none\">자료 열람 및 응찰</a></p>"
                + "<p style=\"font-size:13px;color:#6b7280\">봉인 입찰 — 마감 전 타사 응찰가는 공개되지 않습니다.</p>"
                + WRAP_FOOT;
    }

    /** 비밀번호 재설정 — 6자리 인증코드 + 로그인 페이지 링크. */
    public static String passwordReset(String code, String link, int ttlMinutes) {
        return WRAP_HEAD
                + "<h2 style=\"font-size:18px\">비밀번호 재설정 안내</h2>"
                + "<p>아래 인증코드를 재설정 화면에 입력해 주세요. 유효시간은 " + ttlMinutes + "분입니다.</p>"
                + "<p style=\"font-size:28px;font-weight:700;letter-spacing:6px;color:#1f29fc;margin:16px 0\">"
                + esc(code) + "</p>"
                + "<p style=\"margin-top:8px\"><a href=\"" + esc(link) + "\" "
                + "style=\"color:#1f29fc\">재설정 화면 열기</a></p>"
                + "<p style=\"font-size:13px;color:#6b7280\">본인이 요청하지 않았다면 이 메일을 무시하세요.</p>"
                + WRAP_FOOT;
    }

    /** EDM 광고 본문(수신거부 링크 없음 — 하위호환). 원클릭 수신거부는 {@link #edm(String, String, String)} 사용. */
    public static String edm(String campaignName, String eventName) {
        return edm(campaignName, eventName, null);
    }

    /**
     * EDM 광고 본문 — 캠페인 명 + 안내 + 정보통신망법 수신거부 문구 + 원클릭 수신거부 링크.
     * {@code unsubUrl} 이 있으면 하단에 수신거부 링크를 삽입한다(불투명 토큰 링크 — PII 미포함).
     */
    public static String edm(String campaignName, String eventName, String unsubUrl) {
        String unsubLine = (unsubUrl == null || unsubUrl.isBlank())
                ? "수신을 원치 않으시면 마이페이지 &gt; 수신설정에서 수신거부하실 수 있습니다."
                : "수신을 원치 않으시면 <a href=\"" + esc(unsubUrl) + "\" style=\"color:#6b7280\">수신거부</a> 하실 수 있습니다.";
        return WRAP_HEAD
                + "<p style=\"font-size:12px;color:#9ca3af\">(광고) " + esc(eventName) + "</p>"
                + "<h2 style=\"font-size:18px\">" + esc(campaignName) + "</h2>"
                + "<p>안녕하세요. KINTEX가 준비한 전시·행사 소식을 전해드립니다. "
                + "자세한 내용과 사전등록은 아래에서 확인하실 수 있습니다.</p>"
                + "<hr style=\"border:none;border-top:1px solid #e5e7eb;margin:24px 0 12px\">"
                + "<p style=\"font-size:12px;color:#9ca3af\">본 메일은 수신동의(마케팅 정보 수신)를 하신 분께 발송되었습니다. "
                + unsubLine + " (정보통신망 이용촉진 및 정보보호 등에 관한 법률 준수)</p>"
                + "<p style=\"font-size:12px;color:#9ca3af\">KINTEX 전시운영 시스템 · 발신 전용</p></div>";
    }

    /** 최소 HTML 이스케이프(제한 문자만) — 사용자 입력 값이 본문에 삽입될 때 태그 주입 방지. */
    private static String esc(String s) {
        if (s == null) {
            return "";
        }
        return s.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;").replace("\"", "&quot;");
    }
}
