/* eslint-disable react-hooks/exhaustive-deps */
import React, { useEffect, useState } from "react";
import { Head, usePage, router } from "@inertiajs/react";

import styles from "./user_layout.module.scss";

import Sidebar from "@/components/dashboard/Sidebar";
import DashboardNavbar from "@/components/dashboard/Navbar";
import RightSideBar from "@/components/dashboard/RightSideBar";
// import BottomBar from "@/components/dashboard/BottomBar";

interface FlashProps {
  success?: string | null;
  error?: string | null;
  warning?: string | null;
  info?: string | null;
}

interface UserDashboardLayoutProps {
  children: React.ReactNode;
  title: string;
}

interface FlashMessageState {
  type: "success" | "error" | "warning" | "info";
  message: string;
}

const UserDashboardLayout: React.FC<UserDashboardLayoutProps> = ({
  children,
  title,
}) => {
  const { props } = usePage<{ flash?: FlashProps }>();

  const flash = props.flash || {};

  const [flashMessage, setFlashMessage] =
    useState<FlashMessageState | null>(null);

  useEffect(() => {
    const flashTypes: (keyof FlashProps)[] = [
      "success",
      "error",
      "warning",
      "info",
    ];

    for (const type of flashTypes) {
      const message = flash[type];

      if (message) {
        setFlashMessage({
          type,
          message,
        });

        break;
      }
    }
  }, [flash]);

   useEffect(() => {
    const handleNavigation = () => {
      // disable inertia restoring scroll
      window.history.scrollRestoration = "manual";

      // wait for render
      requestAnimationFrame(() => {
        const layout = document.querySelector(
          `.${styles.layout}`
        ) as HTMLElement;

        if (layout) {
          layout.scrollTo({
            top: 0,
            behavior: "smooth", // 🔥 smooth animation
          });
        }

        // fallback
        window.scrollTo({
          top: 0,
          behavior: "smooth",
        });
      });
    };

    const removeListener = router.on("navigate", handleNavigation);

    return () => removeListener();
  }, []);

  useEffect(() => {
    if (!flashMessage) return;

    const timeout = setTimeout(() => {
      setFlashMessage(null);
    }, 4000);

    return () => clearTimeout(timeout);
  }, [flashMessage]);

  return (
    <>
      <Head title={title} />

     {/* Flash Messages */}
      {flashMessage && (
      <div
        className={`${styles.flash} ${
          flashMessage.type === "success"
            ? styles.flashSuccess
            : flashMessage.type === "error"
            ? styles.flashError
            : flashMessage.type === "warning"
            ? styles.flashWarning
            : styles.flashInfo
        }`}
      >
        <div className={styles.flashIndicator}>
          <span className={styles.flashDot} />
        </div>

        <div className={styles.flashContent}>
          <h5>
            {flashMessage.type === "success" &&
              "Success"}

            {flashMessage.type === "error" &&
              "Error"}

            {flashMessage.type === "warning" &&
              "Warning"}

            {flashMessage.type === "info" &&
              "Information"}
          </h5>

          <p>{flashMessage.message}</p>
        </div>
      </div>
    )}

      <div className={styles.layout}>
        {/* Mobile Bottom Bar */}
        {/*
        <div className={styles.layout__bottombar}>
          <BottomBar />
        </div>
        */}

        {/* Sidebar */}
        <div className={styles.layout__sidebar}>
          <Sidebar />
        </div>

        {/* Main Content */}
        <div className={styles.layout__content}>
          {/* Navbar */}
          <div className={styles.layout__content__navbar}>
            <DashboardNavbar />
          </div>

          {/* Page Content */}
          <div className={styles["layout__content--children"]}>
            {children}

            {/* Right Sidebar */}
            <div
              className={
                styles["layout__content--children--rightbar"]
              }
            >
              <RightSideBar />
            </div>
          </div>
        </div>
      </div>
    </>
  );
};

export default UserDashboardLayout;