import { useState, useEffect } from 'react';
import { api } from '../api';

/**
 * 리비전 리다이렉트 훅
 * BOM 페이지 접근 시 리비전 페이지로 리다이렉트 필요성 확인
 */
export const useRevisionRedirect = (jobNo, fileId, previousFileId = null) => {
    const [redirectInfo, setRedirectInfo] = useState(null);
    const [loading, setLoading] = useState(true);
    const [error, setError] = useState(null);

    useEffect(() => {
        if (!jobNo || !fileId) {
            setLoading(false);
            return;
        }

        checkRevisionRedirect();
    }, [jobNo, fileId, previousFileId]);

    const checkRevisionRedirect = async () => {
        try {
            setLoading(true);
            setError(null);

            const params = new URLSearchParams({
                job_no: jobNo,
                file_id: fileId
            });

            if (previousFileId) {
                params.append('previous_file_id', previousFileId);
            }

            const response = await api.get(`/revision-redirect/check/${jobNo}/${fileId}?${params}`);
            
            if (response.data.success) {
                setRedirectInfo(response.data.data);
            }
        } catch (err) {
            console.error('리비전 리다이렉트 확인 실패:', err);
            setError(err.message);
            // 에러 발생 시 기존 BOM 페이지 사용
            setRedirectInfo({
                should_redirect: false,
                reason: '리비전 상태 확인 실패 - 기존 페이지 사용',
                redirect_url: null,
                processing_summary: null
            });
        } finally {
            setLoading(false);
        }
    };

    return {
        redirectInfo,
        loading,
        error,
        refetch: checkRevisionRedirect
    };
};

/**
 * 리비전 처리 로직 훅
 * 리비전 페이지에서 사용할 상세 처리 결과 조회
 */
export const useRevisionProcessing = (jobNo, fileId, previousFileId = null) => {
    const [processingResult, setProcessingResult] = useState(null);
    const [loading, setLoading] = useState(false);
    const [error, setError] = useState(null);

    const processRevision = async () => {
        if (!jobNo || !fileId) return;

        try {
            setLoading(true);
            setError(null);

            const params = new URLSearchParams({
                job_no: jobNo,
                file_id: fileId
            });

            if (previousFileId) {
                params.append('previous_file_id', previousFileId);
            }

            const response = await api.post(`/revision-redirect/process-revision/${jobNo}/${fileId}?${params}`);
            
            if (response.data.success) {
                setProcessingResult(response.data.data);
            }
        } catch (err) {
            console.error('리비전 처리 실패:', err);
            setError(err.message);
        } finally {
            setLoading(false);
        }
    };

    return {
        processingResult,
        loading,
        error,
        processRevision
    };
};
