import { ApprovalLine, SubmitApprovalRequest, SubmitApprovalResponse, ApprovalDetailResponse, ApprovalContentResponse, ApprovalStatusResponse, CancelApprovalResponse, SubmissionListResponse, ApprovalHistoryResponse } from '@/lib/knox-api/approval/approval'; // Mock 데이터 생성 함수들 export const createMockApprovalLine = (overrides?: Partial): ApprovalLine => ({ epId: '12345', userId: 'user123', emailAddress: 'user@example.com', seq: '1', role: '0', // 기안 aplnStatsCode: '0', // 미결 arbPmtYn: 'N', contentsMdfyPmtYn: 'N', aplnMdfyPmtYn: 'N', opinion: '결재 요청드립니다.', ...overrides }); export const createMockSubmitApprovalRequest = (overrides?: Partial): SubmitApprovalRequest => ({ contents: '결재 요청 내용입니다.', contentsType: 'TEXT', docSecuType: 'PERSONAL', notifyOption: '0', urgYn: 'N', sbmDt: '20241215120000', timeZone: 'GMT+9', docMngSaveCode: '0', subject: '결재 요청 - 테스트', sbmLang: 'ko', apInfId: 'test-ap-inf-id-' + Date.now(), importantYn: 'N', aplns: [ createMockApprovalLine({ seq: '1', role: '0' }), // 기안 createMockApprovalLine({ seq: '2', role: '1', userId: 'approver1' }), // 결재 createMockApprovalLine({ seq: '3', role: '1', userId: 'approver2' }), // 결재 ], ...overrides }); export const mockSubmitApprovalResponse: SubmitApprovalResponse = { result: 'SUCCESS', data: { apInfId: 'test-ap-inf-id-' + Date.now() } }; export const mockApprovalDetailResponse: ApprovalDetailResponse = { result: 'SUCCESS', data: { contentsType: 'TEXT', sbmDt: '20241215120000', sbmLang: 'ko', apInfId: 'test-ap-inf-id-123', systemId: 'EVCP_SYSTEM', notifyOption: '0', urgYn: 'N', docSecuType: 'PERSONAL', status: '1', // 진행중 timeZone: 'GMT+9', subject: '결재 요청 - 테스트', aplns: [ createMockApprovalLine({ seq: '1', role: '0', aplnStatsCode: '1' }), // 기안 완료 createMockApprovalLine({ seq: '2', role: '1', aplnStatsCode: '0', userId: 'approver1' }), // 결재 대기 createMockApprovalLine({ seq: '3', role: '1', aplnStatsCode: '0', userId: 'approver2' }), // 결재 대기 ], attachments: [] } }; export const mockApprovalContentResponse: ApprovalContentResponse = { result: 'SUCCESS', data: { contents: '결재 요청 내용입니다.\n\n상세한 내용은 다음과 같습니다:\n- 항목 1\n- 항목 2\n- 항목 3', contentsType: 'TEXT', apInfId: 'test-ap-inf-id-123' } }; export const mockApprovalStatusResponse: ApprovalStatusResponse = { result: 'SUCCESS', data: [ { apInfId: 'test-ap-inf-id-123', docChgNum: '1', status: '1' // 진행중 } ] }; export const mockCancelApprovalResponse: CancelApprovalResponse = { result: 'SUCCESS', data: { apInfId: 'test-ap-inf-id-123' } }; export const mockSubmissionListResponse: SubmissionListResponse = { result: 'SUCCESS', data: [ { apInfId: 'test-ap-inf-id-123', subject: '결재 요청 - 테스트', sbmDt: '20241215120000', status: '1', urgYn: 'N', docSecuType: 'PERSONAL' }, { apInfId: 'test-ap-inf-id-124', subject: '결재 요청 - 테스트 2', sbmDt: '20241214100000', status: '2', urgYn: 'Y', docSecuType: 'CONFIDENTIAL' } ] }; export const mockApprovalHistoryResponse: ApprovalHistoryResponse = { result: 'SUCCESS', data: [ { apInfId: 'test-ap-inf-id-123', subject: '결재 요청 - 테스트', sbmDt: '20241215120000', status: '1', actionType: 'SUBMIT', actionDt: '20241215120000', userId: 'submitter123' }, { apInfId: 'test-ap-inf-id-124', subject: '결재 요청 - 테스트 2', sbmDt: '20241214100000', status: '2', actionType: 'APPROVE', actionDt: '20241214150000', userId: 'approver1' } ] }; // Mock 함수들 export const mockApprovalAPI = { submitApproval: async (request: SubmitApprovalRequest): Promise => { // 실제 API 호출 시뮬레이션 await new Promise(resolve => setTimeout(resolve, 1000)); return mockSubmitApprovalResponse; }, getApprovalDetail: async (apInfId: string): Promise => { await new Promise(resolve => setTimeout(resolve, 500)); return mockApprovalDetailResponse; }, getApprovalContent: async (apInfId: string): Promise => { await new Promise(resolve => setTimeout(resolve, 300)); return mockApprovalContentResponse; }, getApprovalStatus: async (apInfIds: string[]): Promise => { await new Promise(resolve => setTimeout(resolve, 400)); return mockApprovalStatusResponse; }, cancelApproval: async (apInfId: string): Promise => { await new Promise(resolve => setTimeout(resolve, 800)); return mockCancelApprovalResponse; }, getSubmissionList: async (): Promise => { await new Promise(resolve => setTimeout(resolve, 600)); return mockSubmissionListResponse; }, getApprovalHistory: async (): Promise => { await new Promise(resolve => setTimeout(resolve, 700)); return mockApprovalHistoryResponse; } }; // 상태 및 역할 텍스트 변환 함수들 export const getStatusText = (status: string): string => { const statusMap: Record = { '-3': '암호화실패', '-2': '암호화중', '-1': '예약상신', '0': '보류', '1': '진행중', '2': '완결', '3': '반려', '4': '상신취소', '5': '전결', '6': '후완결' }; return statusMap[status] || '알 수 없음'; }; export const getRoleText = (role: string): string => { const roleMap: Record = { '0': '기안', '1': '결재', '2': '합의', '3': '후결', '4': '병렬합의', '7': '병렬결재', '9': '통보' }; return roleMap[role] || '알 수 없음'; }; export const getApprovalStatusText = (status: string): string => { const statusMap: Record = { '0': '미결', '1': '결재', '2': '반려', '3': '전결', '5': '자동결재' }; return statusMap[status] || '알 수 없음'; };