import { zodResolver } from "@hookform/resolvers/zod";
import Button from "../../components/Button/Button";
import { Grid } from "../../components/Grid/Grid";
import Textfield from "../../components/Textfeild/Textfeild";
import { useForm, Controller } from "react-hook-form";
import { zValidateEnglishString } from "../../data/getFormTypeErrors";
import { z } from "zod";
import { useApiMutation } from "../../utils/useApiRequest";
import { useToast } from "../../hooks/useToast";
import { useModalStore } from "../../context/zustand-store/appStore";

const schema = z.object({
  page: zValidateEnglishString("نام صفحه"),
});

type AddPageProps = {
  getData: () => void;
  item?: any;
};

type FormValues = z.infer<typeof schema>;

export const AddPage = ({ getData, item }: AddPageProps) => {
  const showToast = useToast();
  const { closeModal } = useModalStore();

  const {
    control,
    handleSubmit,
    formState: { errors },
  } = useForm<FormValues>({
    resolver: zodResolver(schema),
    defaultValues: {
      page: item?.name || "",
    },
  });

  const mutation = useApiMutation({
    api: `/auth/api/v1/page/${item ? item?.id + "/" : ""}`,
    method: item ? "put" : "post",
  });

  const onSubmit = async (data: FormValues) => {
    try {
      const payload = {
        name: data.page,
        code: data.page + ".view",
      };

      if (item) {
        await mutation.mutateAsync({
          ...payload,
          id: item.id,
        });
      } else {
        await mutation.mutateAsync(payload);
      }

      showToast("عملیات با موفقیت انجام شد", "success");
      closeModal();
      getData();
    } catch (error: any) {
      if (error.status === 400) {
        showToast("این صفحه تکراری است!", "error");
      }
    }
  };

  return (
    <form onSubmit={handleSubmit(onSubmit)}>
      <Grid container column className="gap-2">
        <Controller
          name="page"
          control={control}
          render={({ field }) => (
            <Textfield
              fullWidth
              placeholder="نام صفحه"
              value={field.value}
              onChange={field.onChange}
              error={!!errors.page}
              helperText={errors.page?.message}
            />
          )}
        />
        <Button type="submit">ثبت</Button>
      </Grid>
    </form>
  );
};
