import { useEffect, useState } from 'react'
import { dataOriginRequest, dataOriginStatic } from "@/common/util/const";
import { calculateTextExprValue } from "@/common/util/util";
import { makeRequest } from "@/common/util/request";


export function useData(config) {
  const [data, setData] = useState()
  const { dataFrom, _context, isDesign, designMockData } = config || {}
  const { dataOrigin, dataSource, requestConfig } = dataFrom || {}

  const calculateData = async () => {
    if (dataOrigin === dataOriginStatic) {
      return calculateTextExprValue(dataSource, {
        recordDataSource: {},
        state: _context?.state,
      })
    } else if (dataOrigin === dataOriginRequest) {
      return makeRequest({
        buttonConfig: {
          options: {
            requestConfig,
          },
        },
        recordDataSource: {},
        state: _context?.state,
        needSuccessToast: false,
        _context,
      }).then((res) => {
        return res?.data
      }).catch(() => {
        return undefined
      })
    }
  }

  useEffect(() => {
    async function fetchData() {
      const tempData = await calculateData();
      if (tempData) {
        setData(tempData)
      } else if (isDesign && designMockData) {
        setData(designMockData)
      }
    }

    fetchData()
  }, [])

  useEffect(() => {
    if (isDesign) {
      if (dataFrom?.dataOrigin === dataOriginStatic) {
        const p = calculateData()
        p.then(res => {
          setData(res)
        })
      }
    }
  }, [dataFrom?.dataSource])

  return {
    data,
    setData,
    calculateData,
  }
}
