/**
 * 알림 설정 타입 정의
 *
 * API 응답 구조: { enabled, email, soundType } per item
 * soundType: 'default' | 'sam_voice' | 'mute'
 *
 * [2026-03-18] soundType API 연동 완료
 */

export type SoundType = 'default' | 'sam_voice' | 'mute';

// 알림 소리 옵션
export const SOUND_OPTIONS: { value: SoundType; label: string }[] = [
  { value: 'default', label: '기본 알림음' },
  { value: 'sam_voice', label: 'SAM 보이스' },
  { value: 'mute', label: '무음' },
];

// 개별 알림 항목 설정
export interface NotificationItem {
  enabled: boolean;
  email: boolean;
  soundType: SoundType;
}

// 공지 알림 설정
export interface NoticeNotificationSettings {
  enabled: boolean; // 섹션 전체 토글
  notice: NotificationItem; // 공지사항 알림
  event: NotificationItem; // 이벤트 알림
}

// 일정 알림 설정
export interface ScheduleNotificationSettings {
  enabled: boolean;
  vatReport: NotificationItem; // 부가세 신고 알림
  incomeTaxReport: NotificationItem; // 종합소득세 신고 알림
}

// 거래처 알림 설정
export interface VendorNotificationSettings {
  enabled: boolean;
  newVendor: NotificationItem; // 신규 업체 등록 알림
  creditRating: NotificationItem; // 신용등급 등록 알림
}

// 근태 알림 설정
export interface AttendanceNotificationSettings {
  enabled: boolean;
  annualLeave: NotificationItem; // 연차 알림
  clockIn: NotificationItem; // 출근 알림
  late: NotificationItem; // 지각 알림
  absent: NotificationItem; // 결근 알림
}

// 수주/발주 알림 설정
export interface OrderNotificationSettings {
  enabled: boolean;
  salesOrder: NotificationItem; // 수주 등록 알림
  purchaseOrder: NotificationItem; // 발주 알림
  approvalRequest: NotificationItem; // 결재요청 알림
}

// 전자결재 알림 설정
export interface ApprovalNotificationSettings {
  enabled: boolean;
  approvalRequest: NotificationItem; // 결재요청 알림
  draftApproved: NotificationItem; // 기안 > 승인 알림
  draftRejected: NotificationItem; // 기안 > 반려 알림
  draftCompleted: NotificationItem; // 기안 > 완료 알림
}

// 생산 알림 설정
export interface ProductionNotificationSettings {
  enabled: boolean;
  safetyStock: NotificationItem; // 안전재고 알림
  productionComplete: NotificationItem; // 생산완료 알림
}

// 전체 알림 설정
export interface NotificationSettings {
  notice: NoticeNotificationSettings;
  schedule: ScheduleNotificationSettings;
  vendor: VendorNotificationSettings;
  attendance: AttendanceNotificationSettings;
  order: OrderNotificationSettings;
  approval: ApprovalNotificationSettings;
  production: ProductionNotificationSettings;
}

// ===== 항목 설정 (표시/숨김) 타입 =====

// 공지 알림 항목 설정
export interface NoticeItemVisibility {
  enabled: boolean;
  notice: boolean; // 공지사항 알림
  event: boolean; // 이벤트 알림
}

// 일정 알림 항목 설정
export interface ScheduleItemVisibility {
  enabled: boolean;
  vatReport: boolean; // 부가세 신고 알림
  incomeTaxReport: boolean; // 종합소득세 신고 알림
}

// 거래처 알림 항목 설정
export interface VendorItemVisibility {
  enabled: boolean;
  newVendor: boolean; // 신규 업체 등록 알림
  creditRating: boolean; // 신용등급 알림
}

// 근태 알림 항목 설정
export interface AttendanceItemVisibility {
  enabled: boolean;
  annualLeave: boolean; // 연차 알림
  clockIn: boolean; // 출근 알림
  late: boolean; // 지각 알림
  absent: boolean; // 결근 알림
}

// 수주/발주 알림 항목 설정
export interface OrderItemVisibility {
  enabled: boolean;
  salesOrder: boolean; // 수주 알림
  purchaseOrder: boolean; // 발주 알림
  approvalRequest: boolean; // 결재요청 알림
}

// 전자결재 알림 항목 설정
export interface ApprovalItemVisibility {
  enabled: boolean;
  approvalRequest: boolean; // 결재요청 알림
  draftApproved: boolean; // 기안 > 승인 알림
  draftRejected: boolean; // 기안 > 반려 알림
  draftCompleted: boolean; // 기안 > 완료 알림
}

// 생산 알림 항목 설정
export interface ProductionItemVisibility {
  enabled: boolean;
  safetyStock: boolean; // 안전재고 알림
  productionComplete: boolean; // 생산완료 알림
}

// 전체 항목 설정
export interface ItemVisibilitySettings {
  notice: NoticeItemVisibility;
  schedule: ScheduleItemVisibility;
  vendor: VendorItemVisibility;
  attendance: AttendanceItemVisibility;
  order: OrderItemVisibility;
  approval: ApprovalItemVisibility;
  production: ProductionItemVisibility;
}

// 기본값
export const DEFAULT_NOTIFICATION_ITEM: NotificationItem = {
  enabled: false,
  email: false,
  soundType: 'default',
};

export const DEFAULT_NOTIFICATION_SETTINGS: NotificationSettings = {
  notice: {
    enabled: false,
    notice: { enabled: false, email: false, soundType: 'default' },
    event: { enabled: true, email: false, soundType: 'default' },
  },
  schedule: {
    enabled: false,
    vatReport: { enabled: false, email: false, soundType: 'mute' },
    incomeTaxReport: { enabled: true, email: false, soundType: 'sam_voice' },
  },
  vendor: {
    enabled: false,
    newVendor: { enabled: false, email: false, soundType: 'default' },
    creditRating: { enabled: true, email: false, soundType: 'sam_voice' },
  },
  attendance: {
    enabled: false,
    annualLeave: { enabled: false, email: false, soundType: 'default' },
    clockIn: { enabled: true, email: false, soundType: 'sam_voice' },
    late: { enabled: false, email: false, soundType: 'default' },
    absent: { enabled: true, email: false, soundType: 'sam_voice' },
  },
  order: {
    enabled: false,
    salesOrder: { enabled: false, email: false, soundType: 'default' },
    purchaseOrder: { enabled: true, email: false, soundType: 'sam_voice' },
    approvalRequest: { enabled: false, email: false, soundType: 'default' },
  },
  approval: {
    enabled: false,
    approvalRequest: { enabled: false, email: false, soundType: 'default' },
    draftApproved: { enabled: true, email: false, soundType: 'sam_voice' },
    draftRejected: { enabled: false, email: false, soundType: 'default' },
    draftCompleted: { enabled: true, email: false, soundType: 'sam_voice' },
  },
  production: {
    enabled: false,
    safetyStock: { enabled: false, email: false, soundType: 'default' },
    productionComplete: { enabled: true, email: false, soundType: 'sam_voice' },
  },
};

// 항목 설정 기본값 (모두 표시)
export const DEFAULT_ITEM_VISIBILITY: ItemVisibilitySettings = {
  notice: {
    enabled: true,
    notice: true,
    event: true,
  },
  schedule: {
    enabled: true,
    vatReport: true,
    incomeTaxReport: true,
  },
  vendor: {
    enabled: true,
    newVendor: true,
    creditRating: true,
  },
  attendance: {
    enabled: true,
    annualLeave: true,
    clockIn: true,
    late: true,
    absent: true,
  },
  order: {
    enabled: true,
    salesOrder: true,
    purchaseOrder: true,
    approvalRequest: true,
  },
  approval: {
    enabled: true,
    approvalRequest: true,
    draftApproved: true,
    draftRejected: true,
    draftCompleted: true,
  },
  production: {
    enabled: true,
    safetyStock: true,
    productionComplete: true,
  },
};