import { PresetConfig, PresetType } from '../types';

/**
 * 문서 프리셋 정의
 * - inspection: QMS 검사 문서용 (인쇄/다운로드)
 * - construction: 건설 프로젝트용 (수정/삭제/인쇄)
 * - approval: 결재 문서용 (수정/상신/인쇄)
 * - readonly: 조회 전용 (인쇄만)
 */
export const DOCUMENT_PRESETS: Record<PresetType, PresetConfig> = {
  // QMS 검사 문서용
  inspection: {
    features: {
      zoom: true,
      drag: true,
      print: true,
      download: true,
    },
    actions: ['pdf', 'print', 'download'],
  },

  // 건설 프로젝트용 (CRUD)
  construction: {
    features: {
      zoom: true,
      drag: true,
      print: true,
      download: false,
    },
    actions: ['edit', 'delete', 'pdf', 'print'],
  },

  // 결재 문서용 (기본)
  approval: {
    features: {
      zoom: true,
      drag: true,
      print: true,
      download: false,
    },
    actions: ['edit', 'submit', 'pdf', 'print'],
  },

  // 결재 문서용 - 기안함 모드 (임시저장 상태: 복제, 상신, 인쇄)
  'approval-draft': {
    features: {
      zoom: true,
      drag: true,
      print: true,
      download: false,
    },
    actions: ['copy', 'submit', 'pdf', 'print'],
  },

  // 결재 문서용 - 결재함 모드 (수정, 반려, 승인, 인쇄)
  'approval-inbox': {
    features: {
      zoom: true,
      drag: true,
      print: true,
      download: false,
    },
    actions: ['edit', 'reject', 'approve', 'pdf', 'print'],
  },

  // 조회 전용
  readonly: {
    features: {
      zoom: true,
      drag: true,
      print: true,
      download: false,
    },
    actions: ['pdf', 'print'],
  },

  // 견적서/문서 전송용 (PDF, 이메일, 팩스, 카카오톡, 인쇄)
  quote: {
    features: {
      zoom: true,
      drag: true,
      print: true,
      download: true,
    },
    actions: ['pdf', 'email', 'fax', 'kakao', 'print'],
  },
};

/**
 * 프리셋 가져오기
 */
export function getPreset(preset: PresetType): PresetConfig {
  return DOCUMENT_PRESETS[preset] || DOCUMENT_PRESETS.readonly;
}

/**
 * 프리셋과 커스텀 설정 병합
 */
export function mergeWithPreset(
  preset: PresetType | undefined,
  customFeatures?: Partial<PresetConfig['features']>,
  customActions?: PresetConfig['actions']
): PresetConfig {
  const base = preset ? getPreset(preset) : DOCUMENT_PRESETS.readonly;

  return {
    features: {
      ...base.features,
      ...customFeatures,
    },
    actions: customActions || base.actions,
  };
}
