/**
 * Slug generation utility for public trip sharing
 * Generates short, URL-safe slugs in format: destination-name-random
 * Example: kapadokya-3gun-x9k2a
 */

/**
 * Türkçe karakterleri İngilizce karşılıklarına çevirir
 */
const turkishToEnglish = (text: string): string => {
  const map: Record<string, string> = {
    'ç': 'c', 'Ç': 'C',
    'ğ': 'g', 'Ğ': 'G',
    'ı': 'i', 'İ': 'I',
    'ö': 'o', 'Ö': 'O',
    'ş': 's', 'Ş': 'S',
    'ü': 'u', 'Ü': 'U',
  };
  
  return text.split('').map(char => map[char] || char).join('');
};

/**
 * Rastgele kısa ID üretir (5 karakter)
 */
const generateRandomId = (): string => {
  const chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
  let result = '';
  for (let i = 0; i < 5; i++) {
    result += chars.charAt(Math.floor(Math.random() * chars.length));
  }
  return result;
};

/**
 * Seyahat için public slug üretir
 * @param title - Seyahat başlığı
 * @param destination - Destinasyon (opsiyonel)
 * @returns URL-safe slug (örn: kapadokya-3gun-x9k2a)
 */
export const generateTripSlug = (title: string, destination?: string): string => {
  // Destinasyon varsa onu kullan, yoksa title'ı kullan
  const baseText = destination || title;
  
  // Türkçe karakterleri çevir
  let slug = turkishToEnglish(baseText);
  
  // Küçük harfe çevir
  slug = slug.toLowerCase();
  
  // Özel karakterleri ve boşlukları temizle, tire ile değiştir
  slug = slug
    .replace(/[^a-z0-9\s-]/g, '') // Sadece harf, rakam, boşluk ve tire
    .replace(/\s+/g, '-') // Boşlukları tire yap
    .replace(/-+/g, '-') // Birden fazla tireyi tek tire yap
    .replace(/^-|-$/g, ''); // Baş ve sondaki tireleri kaldır
  
  // İlk 20 karakteri al
  slug = slug.substring(0, 20);
  
  // Sondaki tireyi kaldır (substring sonrası oluşabilir)
  slug = slug.replace(/-$/g, '');
  
  // Rastgele ID ekle
  const randomId = generateRandomId();
  
  return `${slug}-${randomId}`;
};

/**
 * Slug'ın geçerli olup olmadığını kontrol eder
 */
export const isValidSlug = (slug: string): boolean => {
  // En az 6 karakter (minimum: a-x9k2a)
  if (slug.length < 6) return false;
  
  // Sadece küçük harf, rakam ve tire içermeli
  const slugRegex = /^[a-z0-9-]+$/;
  if (!slugRegex.test(slug)) return false;
  
  // Tire ile başlamamalı veya bitmemeli
  if (slug.startsWith('-') || slug.endsWith('-')) return false;
  
  // Ardışık tire olmamalı
  if (slug.includes('--')) return false;
  
  return true;
};
