/*
 * 마이페이지(SCR-48) 전용 API — 프로필 수정·비밀번호 변경·알림 설정(GAP G-08).
 * endpoints.ts 를 건드리지 않기 위해 MyPage 전용으로 분리한다. 공유 client(api) 만 재사용한다.
 * 백엔드 계약: com.zioinfo.kintex.auth.AccountSettingsController (/api/auth/me/*).
 */
import { api } from '../../api/client';

/** GET /api/auth/me 순증 프로필(백엔드 MeResponse). endpoints 의 KintexPrincipal 상위집합. */
export interface MeProfile {
  userId: string;
  displayName: string;
  hallManager: boolean;
  roleCode?: string | null;
  tenantId?: string | null;
  email?: string | null;
  phone?: string | null;
  deptId?: string | null;
  photoUrl?: string | null;
}

/** 알림 설정(백엔드 NotificationPrefsDto). */
export interface NotificationPrefs {
  notifyDeadline: boolean;
  notifyApproval: boolean;
  notifyPayment: boolean;
  emailEnabled: boolean;
}

export interface ProfileUpdateBody {
  displayName: string;
  phone: string; // 빈 문자열 = 연락처 삭제
}

export interface ChangePasswordBody {
  currentPassword: string;
  newPassword: string;
}

export const myPageApi = {
  /** 현재 사용자 프로필(백엔드 MeResponse 상위집합 — email·phone 포함). endpoints.authApi.me()와 동일 경로. */
  me: () => api.get<MeProfile>('/api/auth/me'),
  /** 프로필 수정(displayName·phone 화이트리스트) → 갱신된 프로필. */
  updateProfile: (body: ProfileUpdateBody) => api.put<MeProfile>('/api/auth/me', body),
  /** 비밀번호 변경(현재 비밀번호 검증). */
  changePassword: (body: ChangePasswordBody) => api.post<void>('/api/auth/me/password', body),
  /** 알림 설정 조회. */
  getNotificationPrefs: () => api.get<NotificationPrefs>('/api/auth/me/notification-prefs'),
  /** 알림 설정 저장(멱등). */
  saveNotificationPrefs: (body: NotificationPrefs) =>
    api.put<NotificationPrefs>('/api/auth/me/notification-prefs', body),
};
