"use client";

import { createContext, useContext, useState, ReactNode } from "react";

type EditModeContextType = {
  editMode: boolean;
  toggleEditMode: () => void;
  contentVersion: number;
  refreshContent: () => void;
  drawerSection: string | null;
  drawerLabel: string;
  openDrawer: (sectionId: string, label: string) => void;
  closeDrawer: () => void;
  isAdmin: boolean;
  setIsAdmin: (v: boolean) => void;
  adminPanelOpen: boolean;
  openAdminPanel: () => void;
  closeAdminPanel: () => void;
};

const EditModeContext = createContext<EditModeContextType>({
  editMode: false,
  toggleEditMode: () => {},
  contentVersion: 0,
  refreshContent: () => {},
  drawerSection: null,
  drawerLabel: "",
  openDrawer: () => {},
  closeDrawer: () => {},
  isAdmin: false,
  setIsAdmin: () => {},
  adminPanelOpen: false,
  openAdminPanel: () => {},
  closeAdminPanel: () => {},
});

export function EditModeProvider({ children }: { children: ReactNode }) {
  const [editMode, setEditMode] = useState(false);
  const [contentVersion, setContentVersion] = useState(0);
  const [drawerSection, setDrawerSection] = useState<string | null>(null);
  const [drawerLabel, setDrawerLabel] = useState("");
  const [isAdmin, setIsAdmin] = useState(false);
  const [adminPanelOpen, setAdminPanelOpen] = useState(false);

  return (
    <EditModeContext.Provider
      value={{
        editMode,
        toggleEditMode: () => setEditMode((v) => !v),
        contentVersion,
        refreshContent: () => setContentVersion((v) => v + 1),
        drawerSection,
        drawerLabel,
        openDrawer: (sectionId, label) => {
          setDrawerSection(sectionId);
          setDrawerLabel(label);
        },
        closeDrawer: () => {
          setDrawerSection(null);
          setDrawerLabel("");
        },
        isAdmin,
        setIsAdmin,
        adminPanelOpen,
        openAdminPanel: () => setAdminPanelOpen(true),
        closeAdminPanel: () => setAdminPanelOpen(false),
      }}
    >
      {children}
    </EditModeContext.Provider>
  );
}

export const useEditMode = () => useContext(EditModeContext);
