package com.zioinfo.kintex.marketing;

import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * EDM 원클릭 수신거부 — 공개·비인증({@code /api/public/**} permitAll). EDM 본문의 불투명 토큰 링크가 이 경로를 연다.
 * <p>브라우저에서 열리는 링크이므로 JSON 봉투 대신 간단한 HTML 안내 페이지를 반환한다(외부 리소스·PII 없음).
 * 토큰만으로 대상 등록의 수신거부 플래그를 멱등 설정한다(정보통신망법 — 수신거부 즉시 반영).
 */
@RestController
@RequestMapping("/api/public/marketing")
public class UnsubscribeController {

    private final MarketingService service;

    public UnsubscribeController(MarketingService service) {
        this.service = service;
    }

    /** GET /api/public/marketing/unsubscribe?token= — 수신거부 처리 후 안내 HTML. */
    @GetMapping(value = "/unsubscribe", produces = MediaType.TEXT_HTML_VALUE + ";charset=UTF-8")
    public String unsubscribe(@RequestParam(required = false) String token) {
        boolean ok = service.unsubscribe(token);
        String title = ok ? "수신거부가 완료되었습니다" : "처리할 수 없는 요청입니다";
        String body = ok
                ? "앞으로 마케팅 정보 메일을 보내지 않습니다. 다시 수신을 원하시면 마이페이지 &gt; 수신설정에서 동의하실 수 있습니다."
                : "링크가 만료되었거나 올바르지 않습니다. 마이페이지 &gt; 수신설정에서 직접 변경해 주세요.";
        return page(title, body);
    }

    private static String page(String title, String body) {
        return "<!doctype html><html lang=\"ko\"><head><meta charset=\"utf-8\">"
                + "<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">"
                + "<title>" + esc(title) + "</title></head>"
                + "<body style=\"font-family:'Pretendard',Arial,sans-serif;background:#f6f7f9;margin:0\">"
                + "<div style=\"max-width:480px;margin:64px auto;padding:32px;background:#fff;"
                + "border-radius:16px;border:1px solid #e5e7eb;text-align:center;color:#1f2937\">"
                + "<h1 style=\"font-size:20px;margin:0 0 12px\">" + esc(title) + "</h1>"
                + "<p style=\"font-size:14px;line-height:1.6;color:#6b7280;margin:0\">" + body + "</p>"
                + "<p style=\"font-size:12px;color:#9ca3af;margin-top:24px\">KINTEX 전시운영 시스템</p>"
                + "</div></body></html>";
    }

    private static String esc(String s) {
        if (s == null) return "";
        return s.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;");
    }
}
