"use client";

import { FC } from "react";
import { useFormState } from "react-dom";
import { Grid } from "@mui/material";
import { TextField } from "ui";
import { Create as InternalCreate } from "@/app/_components/Create";
import { generateCreateAction } from "@/app/_lib/actions";
import { serviceConfig } from "@/app/_lib/config";

type CreateProps = {
  service: string;
};

export const Create: FC<CreateProps> = ({ service }) => {
  const {
    [service]: { entity, table, displayName, createFields: fields },
  } = serviceConfig;
  const createFieldNames = fields.map((val) => val.name);
  const createAction = generateCreateAction({ entity, table, fields });
  const initialState = {
    message: null,
    errors: {},
    values: createFieldNames.reduce((acc, key) => {
      // @ts-expect-error
      acc[key] = fields[key].defaultValue;
      return acc;
    }, {}),
  };
  console.log("initialState", initialState);
  const [formState, formAction] = useFormState(createAction, initialState);

  return (
    <InternalCreate
      title={`Create ${displayName}`}
      entity={entity}
      formAction={formAction}
      formState={formState}
    >
      <Grid container direction="row" rowSpacing={3} columnSpacing={2}>
        {fields.map((field) => (
          <Grid item xs={field.size ?? 6}>
            <TextField
              key={field.name}
              name={field.name}
              label={field.label}
              required={field.required ?? false}
              formState={formState}
              helperText={field.helperText}
            />
          </Grid>
        ))}
      </Grid>
    </InternalCreate>
  );
};
