import React, { useState, useCallback } from 'react'; import { Key, RefreshCw, Copy, Check, Zap } from 'lucide-react'; import { useTranslation } from 'react-i18next'; import { generateEventPassword, generatePasswordSuggestions, validatePassword } from '../../utils/passwordGenerator'; import { Button } from './Button'; interface PasswordGeneratorProps { eventName?: string; eventDate?: string; eventType?: string; onPasswordGenerated: (password: string) => void; className?: string; disabled?: boolean; passwordComplexity?: 'simple' | 'moderate' | 'strong' | 'very_strong'; } export const PasswordGenerator: React.FC = ({ eventName = '', eventDate = '', eventType = 'wedding', onPasswordGenerated, className = '', disabled = false, passwordComplexity = 'moderate' }) => { const { t } = useTranslation(); const [isGenerating, setIsGenerating] = useState(false); const [showSuggestions, setShowSuggestions] = useState(false); const [suggestions, setSuggestions] = useState([]); const [copiedIndex, setCopiedIndex] = useState(null); const generatePassword = useCallback(() => { setIsGenerating(true); // Simulate some processing time for better UX setTimeout(() => { const config = { complexity: passwordComplexity, minLength: passwordComplexity === 'simple' ? 6 : passwordComplexity === 'moderate' ? 8 : 12, requireSpecialChars: passwordComplexity === 'very_strong' }; const password = generateEventPassword({ eventName, eventDate, eventType, config }); onPasswordGenerated(password); setIsGenerating(false); }, 300); }, [eventName, eventDate, eventType, passwordComplexity, onPasswordGenerated]); const generateSuggestions = useCallback(() => { const newSuggestions = generatePasswordSuggestions({ eventName, eventDate, eventType }); setSuggestions(newSuggestions); setShowSuggestions(true); }, [eventName, eventDate, eventType]); const copyToClipboard = async (password: string, index: number) => { try { await navigator.clipboard.writeText(password); setCopiedIndex(index); setTimeout(() => setCopiedIndex(null), 2000); } catch (err) { // Fallback for older browsers const textArea = document.createElement('textarea'); textArea.value = password; document.body.appendChild(textArea); textArea.select(); document.execCommand('copy'); document.body.removeChild(textArea); setCopiedIndex(index); setTimeout(() => setCopiedIndex(null), 2000); } }; const selectPassword = (password: string) => { onPasswordGenerated(password); setShowSuggestions(false); }; const getPasswordStrength = (password: string) => { const validation = validatePassword(password, { complexity: passwordComplexity, minLength: passwordComplexity === 'simple' ? 6 : passwordComplexity === 'moderate' ? 8 : 12 }); if (validation.score <= 1) return { label: t('passwordGenerator.weak'), color: 'text-red-600' }; if (validation.score <= 2) return { label: t('passwordGenerator.fair'), color: 'text-yellow-600' }; if (validation.score <= 3) return { label: t('passwordGenerator.good'), color: 'text-blue-600' }; return { label: t('passwordGenerator.strong'), color: 'text-green-600' }; }; return (
{/* Generate Button */}
{/* Password Suggestions Modal */} {showSuggestions && (

{t('passwordGenerator.suggestions')}

{suggestions.map((password, index) => { const strength = getPasswordStrength(password); return (
{password}
{strength.label} {password.length} {t('passwordGenerator.characters')}
); })}

{t('passwordGenerator.pattern')} {t('passwordGenerator.patternDescription')}

)}
); }; export default PasswordGenerator;