//운영 정보 관리 - 로그 api 연결

import { Axios } from '../utils';

// 비즈니스 로그 조회
export const BusinessLogList = async (token, params) => {
	try {
		const res = await Axios.post(`/api/v1/log/generic/list`, params, {
			headers: { Authorization: `Bearer ${token}` },
			timeout: 600000
		});

		return res.data;
	} catch (e) {
		if (e instanceof Error) {
			throw new Error('BusinessLogList Error', e);
		}
	}
};

export const BusinessLogExport = async (token, params) => {
	try {
		await Axios.post(`/api/v1/log/generic/excel-export`, params, {
			headers: { Authorization: `Bearer ${token}` },
			responseType: 'blob',
			timeout: 300000
		}).then(response => {
			if (!response.data) {
				console.log(response);
				throw new Error('No data received');
			}

			const contentType = response.headers['content-type'] || response.headers['Content-Type'];
			const contentDisposition = response.headers['content-disposition'] || response.headers['Content-Disposition'];

			// Excel이나 ZIP 파일이 아닌 경우
			if (!contentType.includes('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') &&
				!contentType.includes('application/zip')) {
				console.log(response);
				throw new Error(`잘못된 파일 형식입니다. Content-Type: ${contentType}`);
			}

			let fileName = 'businessLog';
			let fileExtension = '.xlsx';
			let mimeType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';

			// ZIP 파일인지 확인
			if (contentType && contentType.includes('application/zip')) {
				fileExtension = '.zip';
				mimeType = 'application/zip';
				fileName = 'businessLog_multiple_files';
			}

			// Content-Disposition에서 파일명 추출
			if (contentDisposition) {
				const fileNameMatch = contentDisposition.match(/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/);
				if (fileNameMatch && fileNameMatch[1]) {
					const extractedFileName = decodeURIComponent(fileNameMatch[1].replace(/['"]/g, ''));
					fileName = extractedFileName;
				}
			} else {
				// Content-Disposition이 없으면 기본 파일명 사용
				fileName = fileName + fileExtension;
			}

			const blob = new Blob([response.data], { type: mimeType });

			// 빈 파일 체크
			if (blob.size === 0) {
				throw new Error('다운로드된 파일이 비어있습니다.');
			}

			// 너무 작은 파일 체크 (실제 Excel 파일은 최소 몇 KB 이상)
			if (blob.size < 1024) { // 1KB 미만
				throw new Error('파일 크기가 너무 작습니다. 올바른 Excel 파일이 아닐 수 있습니다.');
			}

			const href = URL.createObjectURL(blob);
			const link = document.createElement('a');
			link.href = href;
			link.download = fileName;
			link.style.display = 'none';
			link.rel = 'noopener noreferrer';
			document.body.appendChild(link);
			link.click();

			link.remove();
			window.URL.revokeObjectURL(href);
		});
	} catch (e) {
		if (e instanceof Error) {
			throw new Error('BusinessLogExport Error', e);
		}
	}
};

export const getExcelProgress = async (token, taskId) => {
	try {
		const response = await Axios.get(`/api/v1/log/progress/${taskId}`, {
			headers: {
				Authorization: `Bearer ${token}`,
				'Content-Type': 'application/json',
			},
		});

		if (!response.data) {
			throw new Error(`HTTP error! status: ${response.status}`);
		}

		return response;
	} catch (error) {
		console.error('Progress API error:', error);
		throw error;
	}
};