"""
UI модуль для мониторинга ТЭР
"""
import streamlit as st
import pandas as pd
import json
from api_client import upload_file_to_api, make_api_request
from config import TAR_MODES


def render_monitoring_tar_tab():
    """Рендер вкладки мониторинга ТЭР"""
    st.header("⚡ Мониторинг ТЭР (Топливно-энергетических ресурсов)")
    
    # Секция загрузки файлов
    st.subheader("📤 Загрузка файлов")
    uploaded_file = st.file_uploader(
        "Выберите ZIP архив с файлами мониторинга ТЭР",
        type=['zip'],
        key="monitoring_tar_upload"
    )
    
    if uploaded_file is not None:
        if st.button("📤 Загрузить файл", key="monitoring_tar_upload_btn"):
            with st.spinner("Загружаем файл..."):
                file_data = uploaded_file.read()
                result, status_code = upload_file_to_api("/monitoring_tar/upload", file_data, uploaded_file.name)
                
                if status_code == 200:
                    st.success("✅ Файл успешно загружен!")
                    st.json(result)
                else:
                    st.error(f"❌ Ошибка загрузки: {result}")
    
    # Секция получения данных
    st.subheader("📊 Получение данных")
    
    # Выбор формата отображения
    display_format = st.radio(
        "Формат отображения:",
        ["JSON", "Таблица"],
        key="monitoring_tar_display_format",
        horizontal=True
    )
    
    # Выбор режима данных
    mode = st.selectbox(
        "Выберите режим данных:",
        TAR_MODES,
        help="total - строки 'Всего' (агрегированные данные), last_day - последние строки данных, all - все данные",
        key="monitoring_tar_mode"
    )
    
    if st.button("📊 Получить данные", key="monitoring_tar_get_data_btn"):
        with st.spinner("Получаем данные..."):
            # Выбираем эндпоинт в зависимости от режима
            if mode == "all":
                # Используем полный эндпоинт
                result, status_code = make_api_request("/monitoring_tar/get_full_data", {})
            else:
                # Используем фильтрованный эндпоинт
                request_data = {"mode": mode}
                result, status_code = make_api_request("/monitoring_tar/get_data", request_data)
            
            if status_code == 200 and result.get("success"):
                st.success("✅ Данные успешно получены!")
                
                # Показываем данные
                data = result.get("data", {}).get("value", {})
                if data:
                    st.subheader("📋 Результат:")
                    
                    # Парсим данные, если они пришли как строка
                    if isinstance(data, str):
                        try:
                            data = json.loads(data)
                            st.write("✅ JSON успешно распарсен")
                        except json.JSONDecodeError as e:
                            st.error(f"❌ Ошибка при парсинге JSON данных: {e}")
                            st.write("Сырые данные:", data)
                            return
                    
                    if display_format == "JSON":
                        # Отображаем как JSON
                        st.json(data)
                    else:
                        # Отображаем как таблицы
                        if isinstance(data, dict):
                            # Показываем данные по установкам
                            for installation_id, installation_data in data.items():
                                with st.expander(f"🏭 {installation_id}"):
                                    if isinstance(installation_data, dict):
                                        # Показываем структуру данных
                                        for data_type, type_data in installation_data.items():
                                            st.write(f"**{data_type}:**")
                                            if isinstance(type_data, list) and type_data:
                                                df = pd.DataFrame(type_data)
                                                st.dataframe(df)
                                            else:
                                                st.write("Нет данных")
                                    else:
                                        st.write("Нет данных")
                        else:
                            st.json(data)
                else:
                    st.info("📋 Нет данных для отображения")
            else:
                st.error(f"❌ Ошибка: {result.get('message', 'Неизвестная ошибка')}")