import { Check, Code2, Copy, Facebook, Linkedin, Share2 } from 'lucide-react';
import { useRef, useState } from 'react';
import { useOutsideClick } from '../hooks/use-outside-click.ts';
import { useCopyText } from '../hooks/use-copy-text.ts';
import { cn } from '../lib/classname.ts';
import { TwitterIcon } from './ReactIcons/TwitterIcon.tsx';
import { EmbedRoadmapModal } from './CustomRoadmap/EmbedRoadmapModal.tsx';

type ShareRoadmapButtonProps = {
  roadmapId?: string;
  description: string;
  pageUrl: string;
  allowEmbed?: boolean;
};

export function ShareRoadmapButton(props: ShareRoadmapButtonProps) {
  const { description, pageUrl, allowEmbed = false, roadmapId } = props;

  const { isCopied, copyText } = useCopyText();

  const [isEmbedModalOpen, setIsEmbedModalOpen] = useState(false);

  const containerRef = useRef<HTMLDivElement>(null);
  const [isDropdownOpen, setIsDropdownOpen] = useState(false);

  const twitterUrl = `https://twitter.com/intent/tweet?text=${description}&url=${pageUrl}`;
  const fbUrl = `https://www.facebook.com/sharer/sharer.php?quote=${description}&u=${pageUrl}`;
  const hnUrl = `https://news.ycombinator.com/submitlink?t=${description}&u=${pageUrl}`;
  const redditUrl = `https://www.reddit.com/submit?title=${description}&url=${pageUrl}`;
  const linkedinUrl = `https://www.linkedin.com/shareArticle?mini=true&url=${pageUrl}&title=${description}`;

  useOutsideClick(containerRef, () => {
    setIsDropdownOpen(false);
  });

  return (
    <div className="relative" ref={containerRef}>
      {isEmbedModalOpen && (
        <EmbedRoadmapModal
          onClose={() => {
            setIsEmbedModalOpen(false);
          }}
        />
      )}
      <button
        onClick={() => setIsDropdownOpen(!isDropdownOpen)}
        className={cn(
          'inline-flex h-full items-center justify-center rounded-md bg-yellow-400 px-3 py-1.5 text-xs font-medium hover:bg-yellow-500 sm:text-sm',
          {
            'bg-yellow-500': isDropdownOpen,
            'bg-green-400': isCopied,
          },
        )}
        aria-label="Share Roadmap"
      >
        {!isCopied && (
          <>
            <Share2 size="15px" />
            <span className="ml-2 hidden sm:inline">Share</span>
          </>
        )}
        {isCopied && (
          <>
            <Check size="15px" />
            <span className="ml-2 hidden sm:inline">Copied</span>
          </>
        )}
      </button>

      {isDropdownOpen && (
        <div className="absolute right-0 z-[999] mt-1 w-40 rounded-md bg-slate-800 text-sm text-white shadow-lg ring-1 ring-black ring-opacity-5 w-[175px]">
          <div className="flex flex-col px-1 py-1">
            <button
              onClick={() => {
                copyText(pageUrl);
                setIsDropdownOpen(false);
              }}
              className="flex w-full items-center gap-2 rounded-sm px-2 py-2 text-sm text-slate-100 hover:bg-slate-700"
            >
              <div className="flex w-[20px] items-center justify-center">
                <Copy size="15px" className="text-slate-400" />
              </div>
              Copy Link
            </button>
            {allowEmbed && roadmapId && (
              <button
                onClick={() => {
                  setIsDropdownOpen(false);
                  setIsEmbedModalOpen(true);
                }}
                className="flex w-full items-center gap-2 rounded-sm px-2 py-2 text-sm text-slate-100 hover:bg-slate-700"
              >
                <div className="flex w-[20px] items-center justify-center">
                  <Code2 size="15px" className="text-slate-400" />
                </div>
                Embed Roadmap
              </button>
            )}
            <a
              href={twitterUrl}
              target={'_blank'}
              className="mt-1 flex w-full items-center gap-2 rounded-sm px-2 py-2 text-sm text-slate-100 hover:bg-slate-700"
            >
              <div className="flex w-[20px] flex-shrink-0 items-center justify-center">
                <TwitterIcon className="h-[16px] text-slate-400" />
              </div>
              Twitter
            </a>
            <a
              href={fbUrl}
              target={'_blank'}
              className="flex w-full items-center gap-2 rounded-sm px-2 py-2 text-sm text-slate-100 hover:bg-slate-700"
            >
              <div className="flex w-[20px] items-center justify-center">
                <Facebook size="16px" className="text-slate-400" />
              </div>
              Facebook
            </a>
            <a
              href={hnUrl}
              target={'_blank'}
              className="flex w-full items-center gap-2 rounded-sm px-2 py-2 text-sm text-slate-100 hover:bg-slate-700"
            >
              <div className="flex w-[20px] items-center justify-center">
                <img
                  alt={'hackernews logo'}
                  src={'/images/hackernews.svg'}
                  className="h-5 w-5"
                />
              </div>
              Hacker News
            </a>
            <a
              href={redditUrl}
              target={'_blank'}
              className="flex w-full items-center gap-2 rounded-sm px-2 py-2 text-sm text-slate-100 hover:bg-slate-700"
            >
              <div className="flex w-[20px] items-center justify-center">
                <img
                  alt={'reddit logo'}
                  src={'/images/reddit.svg'}
                  className="h-5 w-5"
                />
              </div>
              Reddit
            </a>
            <a
              href={linkedinUrl}
              target={'_blank'}
              className="flex w-full items-center gap-2 rounded-sm px-2 py-2 text-sm text-slate-100 hover:bg-slate-700"
            >
              <div className="flex w-[20px] items-center justify-center">
                <Linkedin size="16px" className="text-slate-400" />
              </div>
              LinkedIn
            </a>
          </div>
        </div>
      )}
    </div>
  );
}