import { useMyFetch } from '#imports' import type { componentsListType, GenericResponse, PlanPrediction, } from '~/types' import type { FrontPageSection } from '~/types/frontSection' export const useStore = defineStore('store', () => { const currentPageID = ref('') // calculator const monthlySavings = ref(137) const storagePeriod = ref(10) const totalInvestment: Ref = ref(0) const minValue = ref() const components = ref({} as FrontPageSection[]) const getSections = async (id: string) => { const { data } = await useMyFetch>( `/api/public/front/sections/${id}`, ) components.value = data } async function getComponents(): Promise { try { const children = components.value if (!children || !Array.isArray(children)) { console.warn('No components available in store.') return [] } const componentsList = [] as componentsListType[] for (const child of children) { const componentName = child.front_section.component_name if (!componentName) continue try { const componentInstance = ( await import(`@/components/section/${componentName}.vue`) ).default const nonReactiveComponent = markRaw(componentInstance) componentsList.push({ name: componentName, component: child.front_section, componentInstance: nonReactiveComponent, }) } catch (error) { console.error(`Failed to load component ${componentName}`, error) } } return componentsList } catch (error) { console.error('Failed to process components list', error) } return [] } async function getCalculator() { try { const { data } = await useMyFetch>( `/api/public/plan-prediction/easy/calculate?monthly_deposit=${monthlySavings.value}&years=${storagePeriod.value}`, { headers: { 'Content-Type': 'application/json', }, onErrorOccured: (_, status) => { throw new Error(`HTTP error: ${status}`) }, }, ) totalInvestment.value = data.total_investement_value } catch (error) { console.error('getList error:', error) } } async function getMinValue() { try { const { data } = await useMyFetch>( '/api/public/plan-prediction/free/minimum', { headers: { 'Content-Type': 'application/json', }, onErrorOccured: (_, status) => { throw new Error(`HTTP error: ${status}`) }, }, ) minValue.value = data } catch (error) { console.error('getList error:', error) } } return { currentPageID, components, totalInvestment, monthlySavings, storagePeriod, minValue, getCalculator, getComponents, getSections, getMinValue, } })