import { useState, useEffect } from 'react';
import { supabase } from '@/db/supabase';

interface DayHistoricalData {
  year: number;
  date: string;
  temp_min: number;
  temp_max: number;
  temp_avg: number;
  precipitation: number;
  humidity: number;
  wind_speed: number;
  cloud_cover: number;
  pressure: number;
}

interface HistoricalAnalysis {
  date: string;
  avg_temp_min: number;
  avg_temp_max: number;
  avg_temp: number;
  avg_precipitation: number;
  avg_humidity: number;
  avg_wind_speed: number;
  avg_cloud_cover: number;
  precipitation_probability: number;
  most_common_condition: string;
  confidence_score: number;
  historical_data: DayHistoricalData[];
  insights: string[];
}

interface HistoricalWeatherData {
  analyses: HistoricalAnalysis[];
  location: {
    lat: number;
    lon: number;
  };
  units: string;
  years_analyzed: number;
}

export function useHistoricalWeather(
  lat: number | null,
  lon: number | null,
  startDate: string | null,
  endDate: string | null,
  enabled: boolean = true
) {
  const [historicalData, setHistoricalData] = useState<HistoricalWeatherData | null>(null);
  const [loading, setLoading] = useState(false);
  const [error, setError] = useState<string | null>(null);

  useEffect(() => {
    if (!enabled || !lat || !lon || !startDate || !endDate) {
      return;
    }

    const fetchHistoricalWeather = async () => {
      try {
        setLoading(true);
        setError(null);

        console.log('Geçmiş hava durumu analizi başlatılıyor...', { lat, lon, startDate, endDate });

        const { data, error: functionError } = await supabase.functions.invoke('get-historical-weather-analysis', {
          body: {
            lat,
            lon,
            start_date: startDate,
            end_date: endDate,
            units: 'metric',
            lang: 'tr',
          },
        });

        if (functionError) {
          console.error('Geçmiş hava durumu hatası:', functionError);
          const errorMsg = await functionError?.context?.text?.();
          if (errorMsg) {
            try {
              const errorData = JSON.parse(errorMsg);
              setError(errorData.error || 'Geçmiş hava durumu verisi alınamadı');
            } catch {
              setError('Geçmiş hava durumu verisi alınamadı');
            }
          } else {
            setError('Geçmiş hava durumu verisi alınamadı');
          }
          return;
        }

        if (data?.error) {
          console.error('Geçmiş hava durumu API hatası:', data.error);
          setError(data.error);
          return;
        }

        console.log('Geçmiş hava durumu analizi tamamlandı:', data.analyses?.length, 'gün');
        setHistoricalData(data);
      } catch (err: any) {
        console.error('Geçmiş hava durumu fetch hatası:', err);
        setError('Geçmiş hava durumu yüklenirken bir hata oluştu');
      } finally {
        setLoading(false);
      }
    };

    fetchHistoricalWeather();
  }, [lat, lon, startDate, endDate, enabled]);

  return {
    historicalData,
    analyses: historicalData?.analyses || [],
    loading,
    error,
    refetch: () => {
      if (lat && lon && startDate && endDate) {
        setHistoricalData(null);
        setError(null);
      }
    },
  };
}
