#!/usr/bin/env python3
"""
Télécharge 60k+ candles 1m depuis Binance (environ 40 jours)
"""
import requests
import pandas as pd
from datetime import datetime, timedelta

def download_binance_klines(symbol='BTCUSDT', interval='1m', limit=60000):
    """Télécharge klines depuis Binance"""

    print(f"📊 Téléchargement {limit:,} candles {interval} pour {symbol}...")

    all_data = []
    base_url = "https://api.binance.com/api/v3/klines"

    # Calculer timestamp de fin (maintenant)
    end_time = int(datetime.now().timestamp() * 1000)

    # Télécharger par chunks de 1000 (limite API Binance)
    while len(all_data) < limit:
        params = {
            'symbol': symbol,
            'interval': interval,
            'limit': 1000,
            'endTime': end_time
        }

        response = requests.get(base_url, params=params)
        data = response.json()

        if not data or len(data) == 0:
            break

        all_data = data + all_data  # Prepend (on va vers le passé)
        end_time = data[0][0] - 1  # Timestamp de la plus vieille bougie - 1ms

        print(f"   Downloaded: {len(all_data):,}/{limit:,} candles...")

        if len(data) < 1000:  # Plus de données disponibles
            break

    # Limiter au nombre demandé
    all_data = all_data[-limit:]

    print(f"✅ {len(all_data):,} candles téléchargées")

    # Convertir en DataFrame
    df = pd.DataFrame(all_data, columns=[
        'timestamp', 'open', 'high', 'low', 'close', 'volume',
        'close_time', 'quote_volume', 'trades', 'taker_buy_base',
        'taker_buy_quote', 'ignore'
    ])

    # Nettoyer
    df = df[['timestamp', 'open', 'high', 'low', 'close', 'volume']]
    df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')

    for col in ['open', 'high', 'low', 'close', 'volume']:
        df[col] = df[col].astype(float)

    # Stats
    print(f"\n📈 Données:")
    print(f"   Période: {df['timestamp'].iloc[0]} → {df['timestamp'].iloc[-1]}")
    print(f"   Durée: {(df['timestamp'].iloc[-1] - df['timestamp'].iloc[0]).days} jours")
    print(f"   Prix min: ${df['close'].min():,.2f}")
    print(f"   Prix max: ${df['close'].max():,.2f}")

    return df

if __name__ == '__main__':
    # Télécharger 60k candles 1m
    df = download_binance_klines('BTCUSDT', '1m', 60000)

    # Sauvegarder
    output_file = 'historical_data/BTCUSDT_1m_60000candles.csv'
    df.to_csv(output_file, index=False)

    print(f"\n💾 Sauvegardé: {output_file}")
    print(f"   Taille: {len(df):,} lignes")
