/** * Setup State Management * * Provides utilities to determine setup completion status and manage * field locking based on setup state */ export const useSetupState = () => { const coopStore = useCoopBuilderStore() const membersStore = useMembersStore() const policiesStore = usePoliciesStore() const streamsStore = useStreamsStore() // Check if setup is complete using the same logic as middleware const isSetupComplete = computed(() => { // Legacy stores OR new coop builder store (either is enough) const legacyComplete = membersStore.isValid && policiesStore.isValid && streamsStore.hasValidStreams const coopComplete = Boolean( coopStore && Array.isArray(coopStore.members) && coopStore.members.length > 0 && Array.isArray(coopStore.streams) && coopStore.streams.length > 0 ) return legacyComplete || coopComplete }) // Determine if revenue and expense fields should be locked const areRevenueFieldsLocked = computed(() => { return isSetupComplete.value }) const areExpenseFieldsLocked = computed(() => { return isSetupComplete.value }) // Determine if member management should be in separate interface const shouldUseSeparateMemberInterface = computed(() => { return isSetupComplete.value }) // Get setup completion percentage for progress display const setupProgress = computed(() => { let completed = 0 let total = 4 // policies, members, revenue, costs if (policiesStore.isValid || (coopStore.equalHourlyWage > 0)) completed++ if (membersStore.members.length > 0 || coopStore.members.length > 0) completed++ if (streamsStore.hasValidStreams || coopStore.streams.length > 0) completed++ if (coopStore.overheadCosts.length > 0) completed++ return Math.round((completed / total) * 100) }) // Navigation helpers const goToSetup = () => { navigateTo('/coop-planner') } const goToMemberManagement = () => { navigateTo('/settings#members') } const goToRevenueMix = () => { navigateTo('/mix') } return { isSetupComplete, areRevenueFieldsLocked, areExpenseFieldsLocked, shouldUseSeparateMemberInterface, setupProgress, goToSetup, goToMemberManagement, goToRevenueMix } }