import { getAllInterviewReports, generateInterviewReport, getInterviewReportById, generateResumePdf, evaluateAnswerAPI } from "../services/interview.api" import { useContext, useEffect } from "react" import { InterviewContext } from "../interview.context" import { useParams } from "react-router" export const useInterview = () => { const context = useContext(InterviewContext) const { interviewId } = useParams() if (!context) { throw new Error("useInterview must be used within an InterviewProvider") } const { loading, setLoading, report, setReport, reports, setReports } = context const evaluateAnswer = async ({ question, answer }) => { try { const response = await evaluateAnswerAPI({ question, answer }) return response.evaluation } catch (error) { console.error("Error evaluating answer:", error) return null } } const generateReport = async ({ jobDescription, selfDescription, resumeFile }) => { setLoading(true) let response = null try { response = await generateInterviewReport({ jobDescription, selfDescription, resumeFile }) if (response && response.interviewReport) { setReport(response.interviewReport) } } catch (error) { console.error("Error generating report:", error) setLoading(false) return { error: error.response?.data?.error || error.response?.data?.message || error.message } } finally { setLoading(false) } return response && response.interviewReport ? response.interviewReport : null } const getReportById = async (interviewId) => { setLoading(true) let response = null try { response = await getInterviewReportById(interviewId) if (response && response.interviewReport) { setReport(response.interviewReport) } } catch (error) { console.error("Error fetching report by ID:", error) } finally { setLoading(false) } return response && response.interviewReport ? response.interviewReport : null } const getReports = async () => { setLoading(true) let response = null try { response = await getAllInterviewReports() if (response && response.interviewReports) { setReports(response.interviewReports) } } catch (error) { console.error("Error fetching reports:", error) } finally { setLoading(false) } return response && response.interviewReports ? response.interviewReports : [] } const getResumePdf = async (interviewReportId, candidateAnswers = []) => { setLoading(true) let response = null try { response = await generateResumePdf({ interviewReportId, candidateAnswers }) const url = window.URL.createObjectURL(new Blob([ response ], { type: "application/pdf" })) const link = document.createElement("a") link.href = url link.setAttribute("download", `resume_${interviewReportId}.pdf`) document.body.appendChild(link) link.click() link.remove() window.URL.revokeObjectURL(url) } catch (error) { console.error("PDF Download Error:", error) let errorMessage = "Failed to download resume.\nError message: " + error.message; if (error.response && error.response.data instanceof Blob) { try { const text = await error.response.data.text(); const json = JSON.parse(text); errorMessage += "\n\nServer Reason: " + (json.error || json.message); } catch(e){} } alert(errorMessage) } finally { setLoading(false) } } useEffect(() => { if (interviewId) { getReportById(interviewId) } else { getReports() } }, [ interviewId ]) return { loading, report, reports, generateReport, getReportById, getReports, getResumePdf, evaluateAnswer } }