import streamlit as st
import ccxt
import pandas as pd
import subprocess
import time

# Настройка страницы
st.set_page_config(page_title="Crypto Bot Dashboard", layout="wide")

st.title("🤖 Панель Управления Ботом")

# Создаем три вкладки
tab1, tab2, tab3 = st.tabs(["📈 График Цены", "📋 История Ордеров", "🛠 Технический Лог"])

# -----------------------------------------------------------------------------
# Вкладка 1: Графики
# -----------------------------------------------------------------------------
with tab1:
    st.header("Мониторинг BTC/USDT")
    
    try:
        exchange = ccxt.binance()
        # Скачиваем свечи
        ohlcv = exchange.fetch_ohlcv('BTC/USDT', timeframe='1h', limit=100)
        
        # Создаем DataFrame
        df = pd.DataFrame(ohlcv, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])
        df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')
        
        # График
        st.line_chart(df.set_index('timestamp')['close'])
        
        # Метрики
        col1, col2, col3 = st.columns(3)
        last_price = df['close'].iloc[-1]
        col1.metric("Текущая цена", f"{last_price} $")
        col2.metric("Объем (24ч)", f"{df['volume'].sum():.0f}")
        col3.metric("High (24ч)", f"{df['high'].max()} $")
        
    except Exception as e:
        st.error(f"Ошибка получения данных: {e}")

# -----------------------------------------------------------------------------
# Вкладка 2: История ордеров
# -----------------------------------------------------------------------------
with tab2:
    st.header("Журнал сделок")
    
    mock_data = {
        'ID': ['1001', '1002', '1003'],
        'Время': ['2023-10-25 10:00', '2023-10-25 12:30', '2023-10-26 09:15'],
        'Тип': ['BUY', 'SELL', 'BUY'],
        'Цена': [34000, 34500, 34200],
        'Объем': [0.05, 0.05, 0.1],
        'Статус': ['Исполнен', 'Исполнен', 'В ожидании']
    }
    
    df_orders = pd.DataFrame(mock_data)
    
    st.dataframe(df_orders, width="stretch", hide_index=True)

# -----------------------------------------------------------------------------
# Вкладка 3: Логи системы
# -----------------------------------------------------------------------------
with tab3:
    st.header("System Logs")
    
    col_btn, col_info = st.columns([1, 4])
    if col_btn.button("🔄 Обновить логи"):
        st.rerun()
        
    try:
        # Показываем последние 100 строк лога без фильтрации, как есть.
        # Флаг --no-pager обязателен для вывода в текстовом виде.
        cmd = "journalctl -u tradebot -n 100 --no-pager"
        logs = subprocess.check_output(cmd.split()).decode('utf-8')
        
        st.text_area("Вывод терминала:", value=logs, height=500)
        
    except Exception as e:
        st.error(f"Не удалось прочитать логи: {e}")
