/* eslint-disable @typescript-eslint/no-explicit-any */
import SeoPlugin from '@/components/page-builder/plugins/seo-plugin';
import config from '@/config/builder-config';
import { updateRequest } from '@/data/request/update-request';
import { useSeoStore } from '@/store/useSeoStore';
import { Puck } from '@puckeditor/core';
import { startTransition, useEffect } from 'react';
import { useTranslation } from 'react-i18next';
import { toast } from 'sonner';
import '../../../../css/puck.css';

const Builder = ({ page }: { page: any }) => {
  const { t } = useTranslation();
  const store = useSeoStore();

  useEffect(() => {
    if (page?.seo) {
      store.setData({
        og_image: page.seo.og_image || '',
        meta_title: page.seo.meta_title || '',
        meta_description: page.seo.meta_description || '',
        meta_keywords: page.seo.meta_keywords || '',
        disable_seo: page.seo.disable_seo || false,
      });
    }
    // eslint-disable-next-line react-hooks/exhaustive-deps
  }, []);

  const initialData = {
    root: {
      props: {
        title: page?.title || 'Untitled Page',
      },
    },
  };

  const onSave = (data: any) => {
    startTransition(async () => {
      const res = await updateRequest({
        url: `/api/admin/pages/${page.id}`,
        formData: {
          title: data?.root?.props?.title || 'Untitled Page',
          content: data,
          seo: {
            og_image: store.og_image,
            meta_title: store.meta_title,
            meta_description: store.meta_description,
            meta_keywords: store.meta_keywords,
            disable_seo: store.disable_seo,
          },
        },
      });

      if (res?.success) {
        toast.success(t(res?.message));
      }
    });
  };
  return (
    <div className="h-screen">
      <Puck
        config={config}
        data={!Array.isArray(page?.content) ? page?.content : initialData}
        onPublish={onSave}
        plugins={[SeoPlugin]}
      />
    </div>
  );
};

Builder.layout = (page: React.ReactNode) => <>{page}</>;

export default Builder;
