import { AlarmType } from './alarm.entity';

/**
 * 알람 타입 → 앱이 열어야 할 인앱 경로 결정 — 순수 로직.
 *
 * 분리 이유: 목적지를 호출부가 아니라 FCM 계층에서 `alm_id` 로 파생하던 동작 때문에
 * 분석 완료 푸시(SND002)가 이벤트 상세 화면으로 가서 "알람 내용을 불러올 수 없습니다" 팝업이 떴다.
 *  - "어디로 보내는가"는 사용자가 바로 보는 결과라 DB/FCM SDK 와 분리해 단위테스트로 회귀를 막는다.
 *  - 반환값은 **인앱 상대경로**다. 절대 URL 을 만들지 않는다 — baseUrl 결합은 호출부 책임이다.
 *  - 경로는 웹 라우트(`insuniverse-site/front/src/App.tsx`)에 실재하는 것만 쓴다.
 *  - 알람타입 코드는 `alarm.entity` 의 `AlarmType` 을 그대로 쓴다. 여기서 문자열을 다시 적으면
 *    같은 사실이 두 곳에 생겨 enum 이 바뀔 때 조용히 어긋난다. 특히 `alimtalk.entity` 가
 *    같은 `SND00x` 문자열을 다른 의미(SND003=충전 · SND004=실손추가)로 쓴다.
 */

/** 분석 알람 중 실손 분석을 가르는 메시지 표지 */
const LOSS_ANALYSIS_MARK = '실손';

/**
 * 알람타입 + 알람메시지 → 인앱 상대경로.
 *  - 결제(SND001) → 결제내역
 *  - 분석(SND002) → 실손이면 실손분석 목록, 아니면 일반분석 목록
 *  - 팩스(SND003) → 청구서 목록 (웹 알람 클릭 로직과 같은 목적지)
 *  - 그 외(이벤트 SND004 · enum 밖 코드) → 메인. 이벤트는 호출부가 자기 목적지를 직접 넘긴다
 */
export function resolveAlarmDeepLink(
  almType: AlarmType,
  almMessage: string,
): string {
  if (almType === AlarmType.결제) return '/mypage/payment-history';
  if (almType === AlarmType.분석) {
    return almMessage.includes(LOSS_ANALYSIS_MARK)
      ? '/analysis/loss/list'
      : '/analysis/list';
  }
  if (almType === AlarmType.팩스) return '/invoices/list';
  return '/main';
}
