import { useState } from 'react' import { demoApi } from '../services/api' import type { DatasetCreateResponse, QualityCheckRead } from '../types' import { formatError } from '../lib/formatError' interface DemoWorkflowOptions { loadProjects: () => Promise loadProjectData: (projectId: string) => Promise<{ datasets: DatasetCreateResponse[] } | null> loadDatasetDetails: (projectId: string, dataset: DatasetCreateResponse) => Promise loadDetectionRuns: (projectId?: string | null) => Promise loadSegmentationRuns: (projectId?: string | null) => Promise loadQualityChecks: (projectId?: string | null) => Promise loadExports: (projectId?: string | null) => Promise setSelectedProjectId: (projectId: string) => void setSelectedDatasetId: (datasetId: string | null) => void setSelectedMapAreaId: (areaId: string) => void setQaCandidateDatasetId: (datasetId: string) => void setQaReferenceDatasetId: (datasetId: string) => void setQaAreaId: (areaId: string) => void setDetectionReferenceDatasetId: (datasetId: string) => void setSegmentationReferenceDatasetId: (datasetId: string) => void setErrorMessage: (message: string | null) => void } export function useDemoWorkflow({ loadProjects, loadProjectData, loadDatasetDetails, loadDetectionRuns, loadSegmentationRuns, loadQualityChecks, loadExports, setSelectedProjectId, setSelectedDatasetId, setSelectedMapAreaId, setQaCandidateDatasetId, setQaReferenceDatasetId, setQaAreaId, setDetectionReferenceDatasetId, setSegmentationReferenceDatasetId, setErrorMessage, }: DemoWorkflowOptions) { const [loadingDemoWorkflow, setLoadingDemoWorkflow] = useState(false) const [demoWorkflowMessage, setDemoWorkflowMessage] = useState(null) const loadDemoWorkflow = async () => { setLoadingDemoWorkflow(true) setDemoWorkflowMessage(null) setErrorMessage(null) try { const result = await demoApi.seedWorkflow() setSelectedProjectId(result.project_id) setSelectedDatasetId(result.candidate_dataset_id) setSelectedMapAreaId(result.area_id) setQaCandidateDatasetId(result.candidate_dataset_id) setQaReferenceDatasetId(result.reference_dataset_id) setQaAreaId(result.area_id) setDetectionReferenceDatasetId(result.reference_dataset_id) setSegmentationReferenceDatasetId(result.reference_dataset_id) setDemoWorkflowMessage(result.message) await loadProjects() const [projectData] = await Promise.all([ loadProjectData(result.project_id), loadDetectionRuns(result.project_id), loadSegmentationRuns(result.project_id), loadQualityChecks(result.project_id), loadExports(result.project_id), ]) const candidateDataset = projectData?.datasets.find((dataset) => dataset.id === result.candidate_dataset_id) if (candidateDataset) { await loadDatasetDetails(result.project_id, candidateDataset) } } catch (error) { setErrorMessage(formatError(error, 'Failed to load demo workflow')) } finally { setLoadingDemoWorkflow(false) } } return { loadingDemoWorkflow, demoWorkflowMessage, loadDemoWorkflow, } }