import os
import sys
import uuid
import subprocess
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

def main():
    # 1. Проверяем аргументы командной строки (теперь их должно быть минимум 2: файл и ID)
    if len(sys.argv) < 3:
        print("Ошибка: Недостаточно аргументов.")
        print("Использование: python generate_chart.py <путь_к_файлу.csv> <id>")
        sys.exit(1)
        
    csv_path = sys.argv[1]
    task_id = sys.argv[2] # Получаем наш ID (передается строкой)
        
    if not os.path.exists(csv_path):
        print(f"Ошибка: Файл {csv_path} не найден.")
        sys.exit(1)
        
    print(f"Обработка файла: {csv_path} для ID: {task_id}...")

    # 2. Загружаем и готовим данные
    try:
        df = pd.read_csv(csv_path)
        
        # Приводим к формату datetime с приоритетом дня (20-07-2026)
        df['dateTime'] = pd.to_datetime(df['dateTime'], unit='ms')
        
        # Сортируем по времени для корректного отображения линий
        df = df.sort_values('dateTime')
        
    except Exception as e:
        print(f"Ошибка при обработке CSV (проверьте колонки dateTime/closePrice/longShortRatio): {e}")
        sys.exit(1)

    # 3. Строим двухосевой график
    plt.style.use('seaborn-v0_8-dark') 

    # Создаем фигуру с темно-синим фоном (Navy)
    fig, ax1 = plt.subplots(figsize=(16, 8))
    fig.patch.set_facecolor('#001F5B') 
    ax1.set_facecolor('#001F5B')       

    # Определяем неоновые цвета
    color_neon_pink = '#FF00E6'  
    color_neon_lime = '#39FF14'  
    color_grid = '#1A3668'       
    color_text = '#E0E0E0'       

    # Настраиваем сетку
    ax1.grid(True, linestyle='-', color=color_grid, alpha=1, linewidth=3)

    # --- Левая ось Y: Лонг/Шорт (Розовый неон со свечением) ---
    #ax1.set_xlabel('Электроник 24', fontsize=11, color=color_text, labelpad=12)
    #ax1.set_ylabel('Long/Short Ratio', color='#FFFFFF', fontsize=13, fontweight='bold', labelpad=20)
    
    # Свечение для L/S
    ax1.plot(df['dateTime'], df['longShortRatio'], color=color_neon_pink, linewidth=9, alpha=0.15) 
    ax1.plot(df['dateTime'], df['longShortRatio'], color=color_neon_pink, linewidth=4.5, alpha=0.3)  
    ax1.plot(df['dateTime'], df['longShortRatio'], color=color_neon_pink, linewidth=2.5, alpha=1.0, label='L/S Ratio') 

    ax1.tick_params(axis='y', labelcolor='#FFFFFF', labelsize=21)
    ax1.spines['left'].set_color('#FFFFFF') 

    # --- Правая ось Y: Цена BTC (Салатный неон со свечением) ---
    ax2 = ax1.twinx()
    #ax2.set_ylabel('BTC Price (USDT)', color='#FFFFFF', fontsize=13, fontweight='bold', labelpad=20)
    
    # Свечение для цены
    ax2.plot(df['dateTime'], df['closePrice'], color=color_neon_lime, linewidth=5, alpha=0.15) 
    ax2.plot(df['dateTime'], df['closePrice'], color=color_neon_lime, linewidth=2.5, alpha=0.3)
    ax2.plot(df['dateTime'], df['closePrice'], color=color_neon_lime, linewidth=1.5, alpha=1.0, label='BTC Price')

    ax2.tick_params(axis='y', labelcolor='#FFFFFF', labelsize=21)
    ax2.spines['right'].set_color('#FFFFFF')
    
    ax1.spines['top'].set_visible(False)
    ax1.spines['bottom'].set_color(color_grid)
    ax2.spines['top'].set_visible(False)

    # Настройка оси X (исправление дублирования дат)
    locator = mdates.AutoDateLocator(minticks=6, maxticks=12)
    ax1.xaxis.set_major_locator(locator)
    ax1.xaxis.set_major_formatter(mdates.DateFormatter('%d-%m %H:%M'))
    ax1.tick_params(axis='x', labelcolor='#FFFFFF', labelsize=13)
    fig.autofmt_xdate(rotation=20)

    # Красивая темная легенда
    lines_1, labels_1 = ax1.get_legend_handles_labels()
    lines_2, labels_2 = ax2.get_legend_handles_labels()
    leg = ax1.legend(lines_1 + lines_2, labels_1 + labels_2, loc='upper left', frameon=True, fontsize=10)
    leg.get_frame().set_facecolor('#001540') 
    leg.get_frame().set_edgecolor(color_grid) 
    for text in leg.get_texts(): text.set_color(color_text) 

    #plt.title('BTC Price vs Top Traders Long/Short Ratio', fontsize=15, color='#FFFFFF', pad=20, fontweight='bold')
    fig.tight_layout(pad=2.0)

    # 4. Генерируем случайное имя файла для картинки
    random_suffix = uuid.uuid4().hex[:10]
    output_image = f"chart_{random_suffix}.png"
    
    plt.savefig(output_image, dpi=150)
    plt.close()
    print(f"График успешно сохранен: {output_image}")

    # 5. Передаем имя файла и ID в PHP-скрипт
    php_script = "analytic_result.php"
    
    if os.path.exists(php_script):
        print(f"Вызываем {php_script} с параметрами: {output_image}, {task_id}...")
        try:
            # Передаем два аргумента: [путь_к_картинке, id]
            result = subprocess.run(['php', php_script, output_image, task_id], 
                                    capture_output=True, text=True, check=True)
            if result.stdout:
                print(f"Ответ от PHP:\n{result.stdout}")
        except subprocess.CalledProcessError as e:
            print(f"Ошибка при выполнении PHP скрипта: {e.output}")
    else:
        print(f"Предупреждение: PHP-скрипт '{php_script}' не найден.")

    # 6. Удаляем исходный CSV файл
    print(f"Удаляем исходный файл: {csv_path}...")
    try:
        os.remove(csv_path)
        print("CSV файл успешно удален.")
    except FileNotFoundError:
        pass 
    except PermissionError:
        print(f"Ошибка: Не удалось удалить {csv_path}. Файл заблокирован системой.")
    except Exception as e:
        print(f"Ошибка при удалении файла: {e}")

if __name__ == "__main__":
    main()