/home/edulekha/heavenbuildpro.com/wp-content/plugins/extendify/src/Onboarding/api/DataApi.js
import { useUserSelectionStore } from '@onboarding/state/UserSelections'
import { getHeadersAndFooters } from './WPApi'
import { Axios as api } from './axios'

export const getUserSelectionData = () =>
    api.get('onboarding/user-selection-data')
export const saveUserSelectionData = (data) =>
    api.post('onboarding/user-selection-data', { data })

// const PATTERNS_HOST = 'http://localhost:3000'
const PATTERNS_HOST = 'https://patterns.extendify.com'

const fetchTemplates = async (type, siteType) => {
    const { wpLanguage, wpVersion } = window.extOnbData
    const { goals, plugins } = useUserSelectionStore.getState()
    const url = new URL(`${PATTERNS_HOST}/api/${type}-templates`)
    url.searchParams.append('siteType', siteType?.slug)
    wpVersion && url.searchParams.append('wpVersion', wpVersion)
    wpLanguage && url.searchParams.append('lang', wpLanguage)
    goals?.length && url.searchParams.append('goals', JSON.stringify(goals))
    plugins?.length &&
        url.searchParams.append('plugins', JSON.stringify(plugins))
    const res = await fetch(url.toString(), {
        headers: { 'Content-Type': 'application/json' },
    })
    if (!res.ok) throw new Error('Bad response from server')
    return await res.json()
}

export const getHomeTemplates = async (siteType) => {
    const styles = await fetchTemplates('home', siteType)
    const { headers, footers } = await getHeadersAndFooters()
    if (!styles?.length) {
        throw new Error('Could not get styles')
    }
    return styles.map(({ id, patterns }, index) => {
        // Cycle through the headers and footers
        const header = headers[index % headers.length]
        const footer = footers[index % footers.length]
        return {
            id,
            code: patterns.map(({ code }) => code).flat(),
            headerCode: header?.content?.raw?.trim() ?? '',
            footerCode: footer?.content?.raw?.trim() ?? '',
        }
    })
}
export const getPageTemplates = async (siteType) => {
    const pages = await fetchTemplates('page', siteType)
    if (!pages?.recommended) {
        throw new Error('Could not get pages')
    }
    return {
        recommended: pages.recommended.map(({ slug, ...rest }) => ({
            ...rest,
            slug,
            id: slug,
        })),
        optional: pages.optional.map(({ slug, ...rest }) => ({
            ...rest,
            slug,
            id: slug,
        })),
    }
}

export const getGoals = async () => {
    const goals = await api.get('onboarding/goals')
    if (!goals?.data) {
        throw new Error('Could not get goals')
    }
    return goals.data
}
export const getSuggestedPlugins = async () => {
    const suggested = await api.get('onboarding/suggested-plugins')
    if (!suggested?.data) {
        throw new Error('Could not get suggested plugins')
    }
    return suggested.data
}

export const pingServer = () => api.get('onboarding/ping')