'use client';

import type { Context, MouseEventHandler } from 'react';
import { createContext } from 'react';

export interface DropdownContextProps {
  isOpen: boolean;
  toggle: MouseEventHandler;
}

let dropdownContext: Context<DropdownContextProps> | null = null;

function getContext(): Context<DropdownContextProps> {
  if (!dropdownContext) {
    dropdownContext = createContext<DropdownContextProps>({
      isOpen: false,
      toggle: () => {},
    });
  }

  return dropdownContext;
}

export const DropdownContext = /*#__PURE__*/ new Proxy(
  {} as Context<DropdownContextProps>,
  /*#__PURE__*/ new Proxy<ProxyHandler<Context<DropdownContextProps>>>(
    {},
    {
      get(_, handler) {
        const target = getContext();

        // @ts-ignore
        return (_target, ...args) => Reflect[handler](target, ...args);
      },
    }
  )
);
