"""
UI модуль для мониторинга топлива
"""
import streamlit as st
import pandas as pd
from api_client import upload_file_to_api, make_api_request
from config import FUEL_COLUMNS


def render_monitoring_fuel_tab():
    """Рендер вкладки мониторинга топлива"""
    st.header("⛽ Мониторинг топлива - Полный функционал")
    
    # Секция загрузки файлов
    st.subheader("📤 Загрузка файлов")
    uploaded_fuel = st.file_uploader(
        "Выберите ZIP архив с мониторингом топлива",
        type=['zip'],
        key="fuel_upload"
    )
    
    if uploaded_fuel is not None:
        if st.button("📤 Загрузить мониторинг топлива", key="upload_fuel_btn"):
            with st.spinner("Загружаю файл..."):
                result, status = upload_file_to_api(
                    "/monitoring_fuel/upload-zip",
                    uploaded_fuel.read(),
                    uploaded_fuel.name
                )
                
                if status == 200:
                    st.success(f"✅ {result.get('message', 'Файл загружен')}")
                    st.info(f"ID объекта: {result.get('object_id', 'N/A')}")
                else:
                    st.error(f"❌ Ошибка: {result.get('message', 'Неизвестная ошибка')}")
    
    st.markdown("---")
    
    # Секция получения данных
    st.subheader("🔍 Получение данных")
    
    col1, col2 = st.columns(2)
    
    with col1:
        st.subheader("Агрегация по колонкам")
        
        columns_fuel = st.multiselect(
            "Выберите столбцы",
            FUEL_COLUMNS,
            default=["normativ", "total"],
            key="fuel_columns"
        )
        
        if st.button("🔍 Получить агрегированные данные", key="fuel_total_btn"):
            if columns_fuel:
                with st.spinner("Получаю данные..."):
                    data = {
                        "columns": columns_fuel
                    }
                    
                    result, status = make_api_request("/monitoring_fuel/get_total_by_columns", data)
                    
                    if status == 200:
                        st.success("✅ Данные получены")
                        st.json(result)
                    else:
                        st.error(f"❌ Ошибка: {result.get('message', 'Неизвестная ошибка')}")
            else:
                st.warning("⚠️ Выберите столбцы")
    
    with col2:
        st.subheader("Данные за месяц")
        
        month = st.selectbox(
            "Выберите месяц",
            [f"{i:02d}" for i in range(1, 13)],
            key="fuel_month"
        )
        
        if st.button("🔍 Получить данные за месяц", key="fuel_month_btn"):
            with st.spinner("Получаю данные..."):
                data = {
                    "month": month
                }
                
                result, status = make_api_request("/monitoring_fuel/get_month_by_code", data)
                
                if status == 200:
                    st.success("✅ Данные получены")
                    st.json(result)
                else:
                    st.error(f"❌ Ошибка: {result.get('message', 'Неизвестная ошибка')}")
    
    st.markdown("---")
    
    # Новая секция для временных рядов
    st.subheader("📈 Временные ряды")
    
    col1, col2 = st.columns(2)
    
    with col1:
        st.subheader("Временные ряды по колонкам")
        
        # Выбор колонок для временного ряда
        series_columns = st.multiselect(
            "Выберите столбцы для временного ряда",
            FUEL_COLUMNS,
            default=["total", "normativ"],
            key="fuel_series_columns"
        )
        
        if st.button("📊 Получить временные ряды", key="fuel_series_btn"):
            if series_columns:
                with st.spinner("Получаю временные ряды..."):
                    data = {
                        "columns": series_columns
                    }
                    
                    result, status = make_api_request("/monitoring_fuel/get_series_by_id_and_columns", data)
                    
                    if status == 200:
                        st.success("✅ Временные ряды получены")
                        
                        # Отображаем данные
                        if result.get('data'):
                            series_data = result['data']
                            
                            # Показываем количество найденных ID
                            st.info(f"📊 Найдено {len(series_data)} объектов")
                            
                            # Показываем JSON данные
                            st.json(result)
                        else:
                            st.warning("⚠️ Данные не найдены")
                    else:
                        st.error(f"❌ Ошибка: {result.get('message', 'Неизвестная ошибка')}")
            else:
                st.warning("⚠️ Выберите столбцы")
    
    with col2:
        st.subheader("ℹ️ Справка")
        st.info("""
        **Временные ряды** показывают изменение значений по месяцам для всех объектов.
        
        **Формат данных:**
        - Каждый ID объекта содержит массивы значений по месяцам
        - Массивы упорядочены по месяцам (01, 02, 03, ..., 12)
        - Отсутствующие месяцы пропускаются
        
        **Доступные колонки:**
        - `total` - общее потребление
        - `normativ` - нормативное потребление
        - И другие колонки из загруженных данных
        
        **Пример результата:**
        ```
        SNPZ.VISB: {
          "total": [23.86, 26.51, 19.66, ...],
          "normativ": [19.46, 19.45, 18.57, ...]
        }
        ```
        """)