"use client";

import type { DashboardPageItem } from "@/components/dashboard/pages/pages-types";
import { PageUpsertFormView } from "@/components/dashboard/pages/page-upsert-form-view";
import { useLocale } from "next-intl";
import { useForm } from "react-hook-form";

export type PageLocationOption = "main" | "footer" | "support";

export interface PageUpsertFormValues {
  title: string;
  location: PageLocationOption;
  slug: string;
  language: "ar" | "en";
  content: string;
  isPublished: boolean;
  showBreadcrumb: boolean;
  showTitle: boolean;
  showInNavigation: boolean;
  metaTitle: string;
  metaDescription: string;
  metaImage: File | null;
}

interface PageUpsertFormProps {
  mode: "create" | "edit";
  initialData?: DashboardPageItem;
}

function resolveLocationOption(page?: DashboardPageItem): PageLocationOption {
  const key = (page?.location.en || "").toLowerCase();

  if (key.includes("footer")) {
    return "footer";
  }

  if (key.includes("support")) {
    return "support";
  }

  return "main";
}

export function PageUpsertForm({ mode, initialData }: PageUpsertFormProps) {
  const locale = useLocale();
  const isRtl = locale === "ar";

  const form = useForm<PageUpsertFormValues>({
    defaultValues: {
      title: isRtl ? initialData?.title.ar || "" : initialData?.title.en || "",
      location: resolveLocationOption(initialData),
      slug: initialData?.slug || "",
      language: initialData?.language || (isRtl ? "ar" : "en"),
      content: "",
      isPublished: initialData?.isPublished ?? false,
      showBreadcrumb: true,
      showTitle: true,
      showInNavigation: false,
      metaTitle: isRtl ? initialData?.title.ar || "" : initialData?.title.en || "",
      metaDescription: "",
      metaImage: null,
    },
    mode: "onBlur",
  });

  const onSubmit = (values: PageUpsertFormValues) => {
    console.log("page-upsert-submit", { mode, values });
  };

  const onSecondaryAction = () => {
    console.log("page-upsert-secondary-action", {
      mode,
      action: mode === "create" ? "preview" : "cancel",
      values: form.getValues(),
    });
  };

  return (
    <PageUpsertFormView
      form={form}
      mode={mode}
      onSubmit={onSubmit}
      onSecondaryAction={onSecondaryAction}
    />
  );
}
