/**
 * Bouton pour générer et copier un lien de partage public pour une playlist
 * T0488: Create Playlist Public Share Link
 */

import { useState } from 'react';
import { Button } from '@/components/ui/button';
import { useToast } from '@/hooks/useToast';
import { useCreateShareLink } from '../hooks/usePlaylist';
import { Copy, Check, Link2, Loader2 } from 'lucide-react';
import { cn } from '@/lib/utils';

interface ShareLinkButtonProps {
  playlistId: number;
  className?: string;
  variant?: 'default' | 'outline' | 'ghost' | 'link' | 'destructive' | 'secondary';
  size?: 'default' | 'sm' | 'lg' | 'icon';
}

export function ShareLinkButton({
  playlistId,
  className,
  variant = 'outline',
  size = 'default',
}: ShareLinkButtonProps) {
  const [copied, setCopied] = useState(false);
  const [shareLink, setShareLink] = useState<string | null>(null);
  const { toast } = useToast();
  const createShareLinkMutation = useCreateShareLink();

  const handleGenerateAndCopy = async () => {
    try {
      // Générer le lien de partage
      const shareLinkData = await createShareLinkMutation.mutateAsync(playlistId);
      
      // Construire l'URL complète
      const shareUrl = `${window.location.origin}/playlists/shared/${shareLinkData.share_token}`;
      setShareLink(shareUrl);

      // Copier dans le presse-papiers
      await navigator.clipboard.writeText(shareUrl);
      setCopied(true);
      toast({
        title: 'Lien copié',
        description: 'Le lien de partage a été copié dans le presse-papiers.',
      });
      
      // Réinitialiser l'état "copié" après 2 secondes
      setTimeout(() => setCopied(false), 2000);
    } catch (error) {
      toast({
        title: 'Erreur',
        description: error instanceof Error ? error.message : 'Impossible de générer le lien de partage.',
        variant: 'destructive',
      });
    }
  };

  const handleCopy = async () => {
    if (!shareLink) {
      await handleGenerateAndCopy();
      return;
    }

    try {
      await navigator.clipboard.writeText(shareLink);
      setCopied(true);
      toast({
        title: 'Lien copié',
        description: 'Le lien de partage a été copié dans le presse-papiers.',
      });
      setTimeout(() => setCopied(false), 2000);
    } catch (error) {
      toast({
        title: 'Erreur',
        description: 'Impossible de copier le lien.',
        variant: 'destructive',
      });
    }
  };

  const isLoading = createShareLinkMutation.isPending;

  return (
    <Button
      variant={variant}
      size={size}
      onClick={shareLink ? handleCopy : handleGenerateAndCopy}
      disabled={isLoading}
      className={cn(className)}
    >
      {isLoading ? (
        <>
          <Loader2 className="h-4 w-4 mr-2 animate-spin" />
          Génération...
        </>
      ) : copied ? (
        <>
          <Check className="h-4 w-4 mr-2" />
          Copié
        </>
      ) : shareLink ? (
        <>
          <Copy className="h-4 w-4 mr-2" />
          Copier le lien
        </>
      ) : (
        <>
          <Link2 className="h-4 w-4 mr-2" />
          Générer un lien de partage
        </>
      )}
    </Button>
  );
}

