'use client';

import { IModalLiveDataCondition } from '../interfaces/modal';
import { useState } from 'react';
import { IOption } from '../interfaces/option';
import { liveDataAction } from '../util/general/general.util';

export interface ILiveDataProps {
  elementLiveData?: IModalLiveDataCondition;
}

const useLiveData = ({ elementLiveData }: ILiveDataProps) => {
  const [liveData, setLiveData] = useState<Array<IOption> | undefined>(
    undefined,
  );

  const checkLiveData = async (
    formData: Record<string, unknown>,
    { name }: Record<'name', string> & Record<'type', string | undefined>,
  ) => {
    const targetFieldData = formData[name] as string | number;

    const liveDataConfig = elementLiveData;
    const isLiveData: boolean =
      !!liveDataConfig?.action && !!liveDataConfig.condition;

    if (!isLiveData) return null;

    if (liveDataConfig!.condition.includes(name)) {
      return await liveDataAction(
        targetFieldData,
        formData,
        liveDataConfig!.action,
      );
    }

    return null;
  };

  return {
    liveData,
    checkLiveData,
    setLiveData,
  };
};

export default useLiveData;
