import type { Place, StartPoint, Trip, TripPlace } from '@/types';

/**
 * Göreme şehir merkezi koordinatları (varsayılan başlangıç noktası)
 */
const GOREME_CENTER: StartPoint = {
  type: 'city_center',
  lat: 38.6431,
  lng: 34.8289,
  name: 'Göreme Merkez',
};

/**
 * Rota başlangıç noktasını belirler
 * Öncelik sırası: balon > otel > ilk yer > şehir merkezi
 * 
 * @param trip - Seyahat bilgisi
 * @param dayPlaces - Gün içindeki yerler (order_index'e göre sıralı)
 * @returns Başlangıç noktası bilgisi
 */
export function resolveStartPoint(
  trip: Trip,
  dayPlaces: (TripPlace & { place?: Place })[]
): StartPoint {
  // 1️⃣ Öncelik: Balon uçuşu varsa
  const balloonPlace = dayPlaces.find(
    (tp) => tp.place?.is_time_fixed && tp.place?.type === 'hot_air_balloon'
  );
  
  if (balloonPlace?.place) {
    return {
      type: 'balloon',
      lat: balloonPlace.place.latitude || GOREME_CENTER.lat,
      lng: balloonPlace.place.longitude || GOREME_CENTER.lng,
      time: balloonPlace.place.fixed_start_time || '05:30',
      name: balloonPlace.place.name,
    };
  }

  // 2️⃣ Öncelik: Otel konumu varsa
  if (
    (trip.start_location_type === 'hotel' || trip.start_location_type === 'custom') &&
    trip.start_lat &&
    trip.start_lng
  ) {
    return {
      type: trip.start_location_type,
      lat: trip.start_lat,
      lng: trip.start_lng,
      name: trip.start_location_name || 'Konaklama Noktası',
    };
  }

  // 2b️⃣ Şehir merkezi açıkça seçilmişse
  if (trip.start_location_type === 'city_center') {
    return GOREME_CENTER;
  }

  // 3️⃣ Öncelik: İlk yer (order_index = 0)
  const firstPlace = dayPlaces.find((tp) => tp.order_index === 0)?.place;
  if (firstPlace && firstPlace.latitude && firstPlace.longitude) {
    return {
      type: 'place',
      lat: firstPlace.latitude,
      lng: firstPlace.longitude,
      name: firstPlace.name,
    };
  }

  // 4️⃣ Varsayılan: Göreme şehir merkezi
  return GOREME_CENTER;
}

/**
 * Balon uçuşu olan bir gün mü kontrol eder
 */
export function hasBalloonFlight(dayPlaces: (TripPlace & { place?: Place })[]): boolean {
  return dayPlaces.some(
    (tp) => tp.place?.is_time_fixed && tp.place?.type === 'hot_air_balloon'
  );
}

/**
 * Sabit saatli etkinlikleri filtreler
 */
export function getFixedTimeEvents(
  dayPlaces: (TripPlace & { place?: Place })[]
): (TripPlace & { place?: Place })[] {
  return dayPlaces.filter((tp) => tp.place?.is_time_fixed);
}

/**
 * Esnek saatli etkinlikleri filtreler
 */
export function getFlexibleEvents(
  dayPlaces: (TripPlace & { place?: Place })[]
): (TripPlace & { place?: Place })[] {
  return dayPlaces.filter((tp) => !tp.place?.is_time_fixed);
}
