// Trip Analysis ve Tour Matching Utilities

export interface TripAnalysis {
  region: string;
  days: number;
  totalPlaces: number;
  placesByDay: { dayIndex: number; places: any[] }[];
  activityTypes: string[];
  totalDistance?: number;
  hasSpecialActivity: boolean;
  hasUndergroundCity: boolean;
  hasValley: boolean;
  hasMuseum: boolean;
  hasPanorama: boolean;
  hasMonastery: boolean;
  hasChurch: boolean;
  dayDuration?: number; // Ortalama gün süresi (saat)
  groupSize?: number;
}

export interface DailyTour {
  id: string;
  slug: string;
  title: string;
  region: string;
  duration_hours: number;
  includes_types: string[];
  min_places: number;
  max_places: number;
  suitable_for: string[];
  base_price_range?: string;
  description?: string;
  highlights?: string[];
}

export interface TourMatchResult {
  daily_tour_slug: string;
  confidence: number;
  reasoning: string;
  efficiency_gain_percent: number;
  why_better: string[];
}

/**
 * Kullanıcının trip verisinden analiz objesi oluşturur
 */
export function analyzeTripPlan(trip: any): TripAnalysis {
  const days = trip.days || [];
  const allPlaces = days.flatMap((d: any) => d.places || []);
  
  // Aktivite tiplerini topla
  const activityTypes = Array.from(
    new Set(allPlaces.map((p: any) => (p.type || '').toLowerCase()))
  ).filter(Boolean) as string[];

  // Özel aktiviteleri kontrol et
  const hasSpecialActivity = activityTypes.some(type =>
    ['balloon', 'hot_air_balloon', 'atv', 'horse_riding', 'horse'].includes(type)
  );

  const hasUndergroundCity = allPlaces.some((p: any) =>
    (p.name || '').toLowerCase().includes('yeraltı') ||
    (p.name || '').toLowerCase().includes('underground') ||
    (p.type || '').toLowerCase().includes('underground_city')
  );

  const hasValley = allPlaces.some((p: any) =>
    (p.name || '').toLowerCase().includes('vadi') ||
    (p.name || '').toLowerCase().includes('valley') ||
    (p.type || '').toLowerCase().includes('valley')
  );

  const hasMuseum = allPlaces.some((p: any) =>
    (p.name || '').toLowerCase().includes('müze') ||
    (p.name || '').toLowerCase().includes('museum') ||
    (p.type || '').toLowerCase().includes('museum')
  );

  const hasPanorama = allPlaces.some((p: any) =>
    (p.name || '').toLowerCase().includes('panorama') ||
    (p.name || '').toLowerCase().includes('kale') ||
    (p.name || '').toLowerCase().includes('castle') ||
    (p.type || '').toLowerCase().includes('panorama')
  );

  const hasMonastery = allPlaces.some((p: any) =>
    (p.name || '').toLowerCase().includes('manastır') ||
    (p.name || '').toLowerCase().includes('monastery') ||
    (p.type || '').toLowerCase().includes('monastery')
  );

  const hasChurch = allPlaces.some((p: any) =>
    (p.name || '').toLowerCase().includes('kilise') ||
    (p.name || '').toLowerCase().includes('church') ||
    (p.type || '').toLowerCase().includes('church')
  );

  // Bölgeyi belirle (ilk günün ilk yerinden)
  let region = 'cappadocia'; // default
  if (allPlaces.length > 0) {
    const firstPlace = allPlaces[0];
    const city = (firstPlace.city || '').toLowerCase();
    if (city.includes('kapadokya') || city.includes('cappadocia') || 
        city.includes('göreme') || city.includes('nevşehir')) {
      region = 'cappadocia';
    } else if (city.includes('istanbul')) {
      region = 'istanbul';
    }
  }

  // Gün başına yer sayısı
  const placesByDay = days.map((day: any, index: number) => ({
    dayIndex: index,
    places: day.places || []
  }));

  return {
    region,
    days: days.length,
    totalPlaces: allPlaces.length,
    placesByDay,
    activityTypes,
    hasSpecialActivity,
    hasUndergroundCity,
    hasValley,
    hasMuseum,
    hasPanorama,
    hasMonastery,
    hasChurch,
  };
}

/**
 * Kural tabanlı tur eşleştirme (Rule-based matching)
 * %70 doğruluk hedefi
 */
export function matchDailyTourRuleBased(analysis: TripAnalysis): TourMatchResult | null {
  const { region, placesByDay, hasUndergroundCity, hasValley, hasMuseum, hasPanorama, hasMonastery, hasChurch } = analysis;

  // Sadece Kapadokya için şimdilik
  if (region !== 'cappadocia') {
    return null;
  }

  // Her gün için ayrı kontrol
  for (const dayData of placesByDay) {
    const dayPlaces = dayData.places;
    const dayPlaceCount = dayPlaces.length;

    // En az 4 yer olmalı
    if (dayPlaceCount < 4) {
      continue;
    }

    // Gün içindeki yer isimlerini kontrol et
    const dayPlaceNames = dayPlaces.map((p: any) => (p.name || '').toLowerCase());
    const dayPlaceTypes = dayPlaces.map((p: any) => (p.type || '').toLowerCase());

    // RED TOUR: Göreme + Paşabağ + Uçhisar
    const hasGoreme = dayPlaceNames.some(n => n.includes('göreme') || n.includes('goreme'));
    const hasPasabag = dayPlaceNames.some(n => n.includes('paşabağ') || n.includes('pasabag'));
    const hasUchisar = dayPlaceNames.some(n => n.includes('uçhisar') || n.includes('uchisar'));
    const hasDevrent = dayPlaceNames.some(n => n.includes('devrent'));

    if ((hasGoreme || hasMuseum) && (hasPasabag || hasDevrent) && (hasUchisar || hasPanorama)) {
      return {
        daily_tour_slug: 'red_tour',
        confidence: 0.85,
        reasoning: 'Planınız Red Tour rotasıyla %85 uyumlu. Göreme Açık Hava Müzesi, Paşabağları ve Uçhisar Kalesi gibi klasik noktaları içeriyor.',
        efficiency_gain_percent: 32,
        why_better: [
          'Profesyonel rehber eşliğinde tarihi detayları öğrenin',
          'Müze giriş biletleri ve transferler dahil',
          'Öğle yemeği ve park yerleri organize edilmiş',
          'Kalabalık saatlerden kaçınarak zaman kazanın'
        ]
      };
    }

    // GREEN TOUR: Yeraltı Şehri + Ihlara Vadisi
    const hasIhlara = dayPlaceNames.some(n => n.includes('ihlara'));
    const hasSelime = dayPlaceNames.some(n => n.includes('selime'));
    const hasDerinkuyu = dayPlaceNames.some(n => n.includes('derinkuyu'));

    if (hasUndergroundCity && (hasIhlara || hasValley) && dayPlaceCount >= 4) {
      return {
        daily_tour_slug: 'green_tour',
        confidence: 0.82,
        reasoning: 'Planınız Green Tour rotasıyla %82 uyumlu. Yeraltı şehri ve Ihlara Vadisi gibi doğa ve tarih içeren noktaları kapsıyor.',
        efficiency_gain_percent: 38,
        why_better: [
          'Yeraltı şehrinde rehber olmadan kaybolma riski yok',
          'Ihlara Vadisi yürüyüşü için en iyi rotalar',
          'Öğle yemeği vadide nehir kenarında',
          'Uzun mesafeli transferler organize edilmiş'
        ]
      };
    }

    // BLUE TOUR: Soğanlı + Keslik + Sakin rotalar
    const hasSoganli = dayPlaceNames.some(n => n.includes('soğanlı') || n.includes('soganli'));
    const hasKeslik = dayPlaceNames.some(n => n.includes('keslik'));

    if ((hasSoganli || hasKeslik || hasChurch) && !hasGoreme && !hasUndergroundCity) {
      return {
        daily_tour_slug: 'blue_tour',
        confidence: 0.75,
        reasoning: 'Planınız Blue Tour rotasıyla %75 uyumlu. Kalabalıktan uzak, sakin ve kültürel noktaları içeriyor.',
        efficiency_gain_percent: 28,
        why_better: [
          'Kalabalık turistik yerlerden uzak, huzurlu deneyim',
          'Yerel köy ziyaretleri ve otantik yaşam',
          'Daha az bilinen ama muhteşem kiliseler',
          'Küçük grup turları ile kişisel deneyim'
        ]
      };
    }

    // MIXED CUSTOM: Karmaşık plan (5+ yer, farklı kategoriler)
    if (dayPlaceCount >= 5 && analysis.activityTypes.length >= 3) {
      return {
        daily_tour_slug: 'mixed_custom',
        confidence: 0.70,
        reasoning: 'Planınız çeşitli kategorilerden çok sayıda yer içeriyor. Özel düzenlenmiş karışık tur daha uygun olabilir.',
        efficiency_gain_percent: 25,
        why_better: [
          'Karmaşık planınız için optimize edilmiş rota',
          'Farklı kategorilerdeki yerleri verimli şekilde gezin',
          'Zaman yönetimi ve lojistik desteği',
          'Esnek program ile ihtiyaçlarınıza uygun'
        ]
      };
    }
  }

  // 4+ kişi veya özel ihtiyaçlar için Private Guide
  if (analysis.groupSize && analysis.groupSize >= 4) {
    return {
      daily_tour_slug: 'private_guide',
      confidence: 0.80,
      reasoning: 'Grup büyüklüğünüz için özel rehber hizmeti daha uygun olabilir.',
      efficiency_gain_percent: 35,
      why_better: [
        'Tamamen size özel program',
        'İstediğiniz yerleri istediğiniz sırayla gezin',
        'Esnek zaman yönetimi',
        'Aile ve büyük gruplar için ideal'
      ]
    };
  }

  return null;
}

/**
 * Provider matching scoring
 */
export interface ProviderMatchScore {
  provider_id: string;
  score: number;
  service_match: boolean;
  region_match: boolean;
  language_match: boolean;
  rating: number;
}

export function calculateProviderScore(
  provider: any,
  dailyTourSlug: string,
  userLanguage: string = 'tr'
): ProviderMatchScore {
  let score = 0;

  // Service match (en önemli) - 4 puan
  const serviceMatch = (provider.daily_tour_services || []).includes(dailyTourSlug);
  if (serviceMatch) {
    score += 4;
  }

  // Region match - 3 puan
  const regionMatch = provider.destinations?.includes('cappadocia') || 
                      provider.destinations?.includes('kapadokya');
  if (regionMatch) {
    score += 3;
  }

  // Language match - 2 puan
  const languageMatch = (provider.languages || []).includes(userLanguage);
  if (languageMatch) {
    score += 2;
  }

  // Rating - 1 puan (0-5 arası rating'i 0-1 arası normalize et)
  const rating = provider.rating || 0;
  score += (rating / 5);

  return {
    provider_id: provider.id,
    score,
    service_match: serviceMatch,
    region_match: regionMatch,
    language_match: languageMatch,
    rating
  };
}

/**
 * En iyi 3 provider'ı bul
 */
export function findTopProviders(
  providers: any[],
  dailyTourSlug: string,
  userLanguage: string = 'tr',
  limit: number = 3
): ProviderMatchScore[] {
  const scores = providers
    .map(p => calculateProviderScore(p, dailyTourSlug, userLanguage))
    .filter(s => s.service_match) // Sadece servisi olan provider'lar
    .sort((a, b) => b.score - a.score)
    .slice(0, limit);

  return scores;
}
