"""
UI модуль для ремонта СА
"""
import streamlit as st
import pandas as pd
from api_client import upload_file_to_api, make_api_request, get_system_ogs, get_available_ogs
from config import REPAIR_TYPES


def render_svodka_repair_ca_tab():
    """Рендер вкладки ремонта СА"""
    st.header("🔧 Ремонт СА - Управление ремонтными работами")
    
    # Секция загрузки файлов
    st.subheader("📤 Загрузка файлов")
    
    uploaded_file = st.file_uploader(
        "Выберите Excel файл или ZIP архив с данными о ремонте СА",
        type=['xlsx', 'xlsm', 'xls', 'zip'],
        key="repair_ca_upload"
    )
    
    if uploaded_file is not None:
        if st.button("📤 Загрузить файл", key="repair_ca_upload_btn"):
            with st.spinner("Загружаю файл..."):
                file_data = uploaded_file.read()
                result, status = upload_file_to_api("/svodka_repair_ca/upload", file_data, uploaded_file.name)
                
                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("Фильтры")
        
        # Получаем доступные ОГ из системного API
        system_ogs = get_system_ogs()
        available_ogs = system_ogs.get("single_ogs", [])
        
        # Фильтр по ОГ
        og_ids = st.multiselect(
            "Выберите ОГ (оставьте пустым для всех)",
            available_ogs if available_ogs else ["KNPZ", "ANHK", "SNPZ", "BASH", "UNH", "NOV"],  # fallback
            key="repair_ca_og_ids"
        )
        
        # Фильтр по типам ремонта
        repair_types = st.multiselect(
            "Выберите типы ремонта (оставьте пустым для всех)",
            REPAIR_TYPES,
            key="repair_ca_types"
        )
        
        # Включение плановых/фактических данных
        include_planned = st.checkbox("Включать плановые данные", value=True, key="repair_ca_planned")
        include_factual = st.checkbox("Включать фактические данные", value=True, key="repair_ca_factual")
    
    with col2:
        st.subheader("Действия")
        
        if st.button("🔍 Получить данные о ремонте", key="repair_ca_get_btn"):
            with st.spinner("Получаю данные..."):
                data = {
                    "include_planned": include_planned,
                    "include_factual": include_factual
                }
                
                # Добавляем фильтры только если они выбраны
                if og_ids:
                    data["og_ids"] = og_ids
                if repair_types:
                    data["repair_types"] = repair_types
                
                result, status = make_api_request("/svodka_repair_ca/get_data", data)
                
                if status == 200:
                    st.success("✅ Данные получены")
                    
                    # Отображаем данные в виде таблицы, если возможно
                    if result.get("data") and isinstance(result["data"], list):
                        df_data = []
                        for item in result["data"]:
                            df_data.append({
                                "ID ОГ": item.get("id", ""),
                                "Наименование": item.get("name", ""),
                                "Тип ремонта": item.get("type", ""),
                                "Дата начала": item.get("start_date", ""),
                                "Дата окончания": item.get("end_date", ""),
                                "План": item.get("plan", ""),
                                "Факт": item.get("fact", ""),
                                "Простой": item.get("downtime", "")
                            })
                        
                        if df_data:
                            df = pd.DataFrame(df_data)
                            st.dataframe(df, use_container_width=True)
                        else:
                            st.info("📋 Нет данных для отображения")
                    else:
                        st.json(result)
                else:
                    st.error(f"❌ Ошибка: {result.get('message', 'Неизвестная ошибка')}")