// activity-log.jsx — 전방위 액티비티 로그 (디버깅·행동분석용)
// 모든 주요 액티비티를 POST {API_BASE}/api/v1/logs 로 적재.
// 개발(Local/Staging) 환경에서는 콘솔에 예쁘게 포맷팅 출력.
// 수집 대상: 페이지 진입(TODAY 로드), 검색 클릭, 매수적기/AI의견 필터 변경,
//            단지 클릭, XAI 모달 활성화 등.

(function () {
  const ENDPOINT = '/api/v1/logs';

  // 이벤트 타입 (Enum)
  const EVENT_TYPES = Object.freeze({
    PAGE_ENTER:    'PAGE_ENTER',
    SEARCH:        'SEARCH',
    FILTER_CHANGE: 'FILTER_CHANGE',
    CLICK:         'CLICK',
    MODAL_OPEN:    'MODAL_OPEN',
    MODAL_CLOSE:   'MODAL_CLOSE',
  });

  function apiBase() { return (window.UJTrack && window.UJTrack.API_BASE) || ''; }

  function isDev() {
    const h = location.hostname;
    return !apiBase()
      || h === 'localhost' || h === '127.0.0.1'
      || h.indexOf('staging') >= 0 || h.indexOf('pages.dev') >= 0 || h.indexOf('vercel.app') >= 0;
  }

  function userId() {
    try {
      const u = window.UJTrack.getUser && window.UJTrack.getUser();
      return (u && (u.id || u.email)) || window.UJTrack.getUid();
    } catch (e) { return 'anon'; }
  }
  function sessionId() { try { return window.UJTrack.getSid(); } catch (e) { return null; } }

  // 핵심 API: log(eventType, payload)
  function log(eventType, payload) {
    payload = payload || {};
    const entry = {
      timestamp: new Date().toISOString(),    // ISO 타임스탬프
      ts: Date.now(),                          // epoch(ms)
      eventType,                               // CLICK / FILTER_CHANGE / ...
      userId: userId(),                        // 유저 식별값
      sessionId: sessionId(),
      page: location.hash.slice(1) || '/',
      today: new Date().toISOString().slice(0, 10), // 오늘 기준일
      ua: navigator.userAgent,
      // payload 내용: filterValues, aptCode, label, value 등
      ...payload,
    };

    if (isDev()) prettyConsole(entry);

    // 백엔드 적재 (실패해도 조용히 — 큐는 UJTrack 이 이중 보관)
    try {
      fetch(apiBase() + ENDPOINT, {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify(entry),
        keepalive: true,
      }).catch(() => {});
    } catch (e) { /* sandbox 등 fetch 차단 환경 무시 */ }

    // 기존 텔레메트리에도 이중 적재 (관리자 대시보드/리플레이용)
    try { window.UJTrack.track('activity_' + String(eventType).toLowerCase(), payload); } catch (e) {}

    return entry;
  }

  function prettyConsole(e) {
    const COLORS = {
      PAGE_ENTER: '#8B5CF6', SEARCH: '#1FB57A', FILTER_CHANGE: '#FFB020',
      CLICK: '#2D7FF9', MODAL_OPEN: '#F5851F', MODAL_CLOSE: '#6B7589',
    };
    const c = COLORS[e.eventType] || '#888';
    const tag = e.aptCode || e.label || e.query || e.page || '';
    // 접힌 그룹으로 깔끔하게
    console.groupCollapsed(
      '%c LOG %c %s %c%s',
      'background:' + c + ';color:#fff;padding:1px 6px;border-radius:3px;font-weight:700;font-family:monospace',
      'color:' + c + ';font-weight:700',
      e.eventType,
      'color:#8A95A8;font-weight:400',
      tag ? '· ' + tag : ''
    );
    console.log('%c時 %c' + e.timestamp, 'color:#6B7589', 'color:#A6B0C2');
    console.log('%c user %c' + e.userId, 'color:#6B7589', 'color:#A6B0C2');
    if (e.filterValues) console.log('%c filter%c', 'color:#6B7589', 'color:#FFB020', e.filterValues);
    if (e.aptCode) console.log('%c apt %c' + e.aptCode, 'color:#6B7589', 'color:#2D7FF9');
    console.log('%c payload', 'color:#6B7589', e);
    console.groupEnd();
  }

  window.UJLog = { log, EVENT_TYPES, isDev };
})();
