import electron from 'electron';
import type { Tray as TrayType, MenuItemConstructorOptions } from 'electron';
const { app, Tray, Menu, nativeImage } = electron;

// v0.2.7 Phase 3 (Task 15) — showAboutDialog 제거됨.
// "Inkling 정보..." 트레이 항목이 사라짐 → 동일 기능은 설정 페이지의 InfoSection 이 담당.
// settings:get-app-info / settings:copy-app-info IPC 핸들러 (settingsApi.ts) 가 역할 인계.

/**
 * v0.2.7 Phase 3 (Task 14) — 트레이 메뉴 슬림. 13 → 4 항목.
 *
 * 백업/내보내기/복원/동기화/사용 로그/Ollama 재확인/AI 재처리/Ollama 설정/자동실행/정보 →
 * 모두 설정 페이지로 이전. 트레이는 4 항목만 노출:
 *   1. 한 줄 적기      (showCapture)
 *   2. 보관한 메모 보기 (showInbox)
 *   3. 설정...        (showSettings — 설정 페이지로 navigate)
 *   4. 종료
 */
export interface TrayCallbacks {
  showInbox: () => void;
  showCapture: () => void;
  showSettings: () => void;
}

/**
 * v0.2.7 Phase 3 (Task 14) — TrayState 슬림. todayCount 만 잔류 (오늘 N번 잡아둠 라벨).
 * ollamaOk / failedCount 메뉴 항목이 사라져 더 이상 필요 없음.
 */
export interface TrayState {
  todayCount: number;
}

let tray: TrayType | null = null;
let _callbacks: TrayCallbacks | null = null;
let _state: TrayState = { todayCount: 0 };

function buildMenu(): electron.Menu {
  const items: MenuItemConstructorOptions[] = [];
  const cb = _callbacks;
  if (!cb) {
    // createTray 호출 전이면 빈 메뉴 (defensive)
    return Menu.buildFromTemplate([{ label: '로딩 중...', enabled: false }]);
  }
  // F4-C: count > 0 시 비활성 라벨로 정체성 신호 노출. count = 0 시 메뉴를 자연스럽게 시작.
  if (_state.todayCount > 0) {
    items.push({ label: `오늘 ${_state.todayCount}번 잡아둠`, enabled: false });
    items.push({ type: 'separator' });
  }
  items.push({ label: '한 줄 적기', click: cb.showCapture });
  items.push({ label: '보관한 메모 보기', click: cb.showInbox });
  items.push({ type: 'separator' });
  items.push({ label: '설정...', click: cb.showSettings });
  items.push({ type: 'separator' });
  items.push({ label: '종료', click: () => { app.isQuitting = true; app.quit(); } });
  return Menu.buildFromTemplate(items);
}

/**
 * v0.2.6 C2 — 1-arg createTray. 기존 10 positional 폐기.
 * v0.2.7 Phase 3 — TrayCallbacks 3-필드로 슬림.
 */
export function createTray(callbacks: TrayCallbacks): TrayType {
  _callbacks = callbacks;
  const icon = nativeImage.createEmpty();
  tray = new Tray(icon);
  tray.setToolTip(`Inkling — 오늘 ${_state.todayCount}`);
  tray.setContextMenu(buildMenu());
  tray.on('click', callbacks.showInbox);
  return tray;
}

/**
 * v0.2.6 C3 — 통합 state 갱신. partial 으로 받아 _state merge + 메뉴 재빌드.
 * v0.2.7 Phase 3 — TrayState 가 todayCount 만 갖도록 슬림.
 */
export function refreshTray(state: Partial<TrayState>): void {
  _state = { ..._state, ...state };
  if (tray === null) return;
  tray.setToolTip(`Inkling — 오늘 ${_state.todayCount}`);
  tray.setContextMenu(buildMenu());
}
