#!/usr/bin/env python3
import yfinance as yf  # Używamy yfinance zamiast tradingview-ta dla danych historycznych
import pandas as pd
import json
from datetime import datetime, timedelta
import logging
from pathlib import Path

# Konfiguracja
BASE_DIR = '/var/www/html/analiza'
DATA_DIR = f'{BASE_DIR}/data'
LOG_DIR = f'{BASE_DIR}/logs'

# Tworzenie katalogów
for dir_path in [DATA_DIR, LOG_DIR]:
    Path(dir_path).mkdir(parents=True, exist_ok=True)
    print(f"Utworzono lub sprawdzono katalog: {dir_path}")

# Konfiguracja logowania
logging.basicConfig(
    filename=f'{LOG_DIR}/eurusd_historical.log',
    format='%(asctime)s - %(levelname)s - %(message)s',
    level=logging.INFO
)

console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
console_handler.setFormatter(formatter)
logging.getLogger('').addHandler(console_handler)

def fetch_historical_data(days=300):
    """Pobieranie historycznych danych EURUSD"""
    try:
        print(f"Próba pobrania {days} dni danych historycznych...")
        
        # Pobieranie danych z Yahoo Finance
        eurusd = yf.Ticker("EURUSD=X")
        end_date = datetime.now()
        start_date = end_date - timedelta(days=days)
        
        print(f"Pobieranie danych od {start_date.date()} do {end_date.date()}...")
        df = eurusd.history(start=start_date, end=end_date)
        
        # Konwersja do formatu JSON
        data = []
        for index, row in df.iterrows():
            candle = {
                'timestamp': index.isoformat(),
                'open': float(row['Open']),
                'high': float(row['High']),
                'low': float(row['Low']),
                'close': float(row['Close']),
                'volume': float(row['Volume'])
            }
            data.append(candle)
        
        # Zapis do pliku
        output_file = f"{DATA_DIR}/eurusd_historical.json"
        with open(output_file, 'w') as f:
            json.dump(data, f, indent=2)
            
        print(f"Zapisano {len(data)} świeczek do pliku: {output_file}")
        print(f"Przykładowa świeczka: {json.dumps(data[0], indent=2)}")
        
        # Zapis do CSV dla łatwiejszej analizy
        csv_file = f"{DATA_DIR}/eurusd_historical.csv"
        df.to_csv(csv_file)
        print(f"Zapisano dane do CSV: {csv_file}")
        
        logging.info(f"Pobrano {len(data)} świeczek historycznych")
        return data
        
    except Exception as e:
        error_msg = f"Błąd podczas pobierania danych: {str(e)}"
        print(error_msg)
        logging.error(error_msg)
        return None

def main():
    print("=== Start programu ===")
    logging.info("Rozpoczęcie pobierania danych historycznych EURUSD")
    result = fetch_historical_data(300)  # Pobierz 300 dni
    if result:
        print(f"Sukces! Pobrano {len(result)} świeczek")
    else:
        print("Wystąpił błąd podczas pobierania danych")
    logging.info("Zakończenie pobierania danych")
    print("=== Koniec programu ===")

if __name__ == "__main__":
    main()
