import { useState, useCallback } from 'react';
import type { AnalysisStatus, AnalysisCompleteEvent } from './types';
export type UseSubjectLiftReturn = {
/** Current analysis status */
status: AnalysisStatus;
/** Error message if status === 'error' */
error: string | null;
/** True when analysis is done and subject lift is ready to interact */
isReady: boolean;
/** Android only — base64 PNG of the segmented subject */
maskedBase64: string | null;
/** Pass this to SubjectLiftView's onAnalysisComplete prop */
handleAnalysisComplete: (event: AnalysisCompleteEvent) => void;
/** Reset back to idle state */
reset: () => void;
};
/**
* Hook to manage SubjectLiftView state.
*
* @example
* const { isReady, handleAnalysisComplete } = useSubjectLift();
*
*
*/
export function useSubjectLift(): UseSubjectLiftReturn {
const [status, setStatus] = useState('idle');
const [error, setError] = useState(null);
const [maskedBase64, setMaskedBase64] = useState(null);
const handleAnalysisComplete = useCallback((event: AnalysisCompleteEvent) => {
const { status: s, message, base64 } = event.nativeEvent;
if (s === 'ready') {
setStatus('ready');
setError(null);
if (base64) {
setMaskedBase64(base64);
}
} else {
setStatus('error');
setError(message ?? 'Unknown error during analysis');
}
}, []);
const reset = useCallback(() => {
setStatus('idle');
setError(null);
setMaskedBase64(null);
}, []);
return {
status,
error,
isReady: status === 'ready',
maskedBase64,
handleAnalysisComplete,
reset,
};
}