"use client";
import React, { useEffect, useRef, useState } from "react";
import Image from "next/image";
import {
  FiChevronDown,
  FiUser,
  FiSettings,
  FiCommand,
  FiBriefcase,
  FiPlus,
  FiGitPullRequest,
  FiLogOut,
  FiHelpCircle,
  FiSlack,
  FiMessageSquare,
  FiCode,
} from "react-icons/fi";

export default function UserMenu() {
  const [dropdownOpen, setDropdownOpen] = useState(false);

  const trigger = useRef<HTMLButtonElement>(null);
  const dropdown = useRef<HTMLDivElement>(null);

  // close on click outside
  useEffect(() => {
    const clickHandler = (event: MouseEvent) => {
      const target = event.target as Node;
      if (!dropdown.current) return;
      if (
        !dropdownOpen ||
        dropdown.current.contains(target) ||
        (trigger.current && trigger.current.contains(target))
      )
        return;
      setDropdownOpen(false);
    };
    document.addEventListener("click", clickHandler);
    return () => document.removeEventListener("click", clickHandler);
  });

  // close if the esc key is pressed
  useEffect(() => {
    const keyHandler = (event: KeyboardEvent) => {
      if (!dropdownOpen || event.keyCode !== 27) return;
      setDropdownOpen(false);
    };
    document.addEventListener("keydown", keyHandler);
    return () => document.removeEventListener("keydown", keyHandler);
  });

  return (
    <section className="bg-gray-2 py-20">
      <div className="container">
        <div className="flex justify-center">
          <div className="relative inline-block">
            <button
              ref={trigger}
              onClick={() => setDropdownOpen(!dropdownOpen)}
              className="mb-3.5 inline-flex h-12 items-center justify-center gap-2 rounded-lg border border-stroke bg-white px-6 py-3 text-base font-medium text-dark"
            >
              Account
              <span
                className={`duration-100 ${dropdownOpen ? "-scale-y-100" : ""}`}
              >
                <FiChevronDown size={20} />
              </span>
            </button>
            <div
              ref={dropdown}
              onFocus={() => setDropdownOpen(true)}
              onBlur={() => setDropdownOpen(false)}
              className={`absolute right-0 top-full w-[240px] divide-y divide-stroke overflow-hidden rounded-lg bg-white ${
                dropdownOpen ? "block" : "hidden"
              }`}
            >
              <div className="flex items-center gap-3 px-4 py-3">
                <div className="relative aspect-square w-10 rounded-full">
                  <Image
                    src="https://cdn.tailgrids.com/2.2/assets/core-components/images/account-dropdowns/image-1.jpg"
                    alt="account"
                    width={40}
                    height={40}
                    className="w-full rounded-full object-cover object-center"
                  />
                  <span className="absolute -right-0.5 -top-0.5 block h-3.5 w-3.5 rounded-full border-2 border-white bg-green"></span>
                </div>
                <div>
                  <p className="text-sm font-semibold text-dark">
                    Andrio Miller
                  </p>
                  <p className="text-sm text-body-color">miller@company.com</p>
                </div>
              </div>
              <div>
                <a
                  href="#0"
                  className="flex w-full items-center justify-between px-4 py-2.5 text-sm font-medium text-dark hover:bg-gray-50"
                >
                  <span className="flex items-center gap-2">
                    <FiUser size={16} />
                    View profile
                  </span>
                </a>
                <a
                  href="#0"
                  className="flex w-full items-center justify-between px-4 py-2.5 text-sm font-medium text-dark hover:bg-gray-50"
                >
                  <span className="flex items-center gap-2">
                    <FiSettings size={16} />
                    Settings
                  </span>
                </a>
                <a
                  href="#0"
                  className="flex w-full items-center justify-between px-4 py-2.5 text-sm font-medium text-dark hover:bg-gray-50"
                >
                  <span className="flex items-center gap-2">
                    <FiCommand size={16} />
                    Keyboard shortcuts
                  </span>
                  <span className="text-xs text-dark-5">⌘K</span>
                </a>
              </div>
              <div>
                <a
                  href="#0"
                  className="flex w-full items-center justify-between px-4 py-2.5 text-sm font-medium text-dark hover:bg-gray-50"
                >
                  <span className="flex items-center gap-2">
                    <FiBriefcase size={16} />
                    Company profile
                  </span>
                </a>
                <a
                  href="#0"
                  className="flex w-full items-center justify-between px-4 py-2.5 text-sm font-medium text-dark hover:bg-gray-50"
                >
                  <span className="flex items-center gap-2">
                    <FiPlus size={16} />
                    Menu Item
                  </span>
                </a>
                <a
                  href="#0"
                  className="flex w-full items-center justify-between px-4 py-2.5 text-sm font-medium text-dark hover:bg-gray-50"
                >
                  <span className="flex items-center gap-2">
                    <FiPlus size={16} />
                    Invite colleagues
                  </span>
                </a>
              </div>
              <div>
                <a
                  href="#0"
                  className="flex w-full items-center justify-between px-4 py-2.5 text-sm font-medium text-dark hover:bg-gray-50"
                >
                  <span className="flex items-center gap-2">
                    <FiGitPullRequest size={16} />
                    Changelog
                  </span>
                </a>
                <a
                  href="#0"
                  className="flex w-full items-center justify-between px-4 py-2.5 text-sm font-medium text-dark hover:bg-gray-50"
                >
                  <span className="flex items-center gap-2">
                    <FiSlack size={16} />
                    Slack Community
                  </span>
                </a>
                <a
                  href="#0"
                  className="flex w-full items-center justify-between px-4 py-2.5 text-sm font-medium text-dark hover:bg-gray-50"
                >
                  <span className="flex items-center gap-2">
                    <FiHelpCircle size={16} />
                    Support
                  </span>
                </a>
                <a
                  href="#0"
                  className="flex w-full items-center justify-between px-4 py-2.5 text-sm font-medium text-dark hover:bg-gray-50"
                >
                  <span className="flex items-center gap-2">
                    <FiCode size={16} />
                    API
                  </span>
                </a>
              </div>
              <div>
                <button className="flex w-full items-center justify-between px-4 py-2.5 text-sm font-medium text-dark hover:bg-gray-50">
                  <span className="flex items-center gap-2">
                    <FiLogOut size={16} />
                    Log out
                  </span>
                </button>
              </div>
            </div>
          </div>
        </div>
      </div>
    </section>
  );
}
