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


def render_statuses_repair_ca_tab():
    """Рендер вкладки статусов ремонта СА"""
    st.header("📋 Статусы ремонта СА")
    
    # Секция загрузки файлов
    st.subheader("📤 Загрузка файлов")
    uploaded_file = st.file_uploader(
        "Выберите файл статусов ремонта СА",
        type=['xlsx', 'xlsm', 'xls', 'zip'],
        key="statuses_repair_ca_upload"
    )
    
    if uploaded_file is not None:
        if st.button("📤 Загрузить файл", key="statuses_repair_ca_upload_btn"):
            with st.spinner("Загружаем файл..."):
                file_data = uploaded_file.read()
                result, status_code = upload_file_to_api("/statuses_repair_ca/upload", file_data, uploaded_file.name)
                
                if status_code == 200:
                    st.success("✅ Файл успешно загружен!")
                    st.json(result)
                else:
                    st.error(f"❌ Ошибка загрузки: {result}")
    
    # Секция получения данных
    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 get_available_ogs(),  # fallback
        key="statuses_repair_ca_og_ids"
    )
    
    # Предустановленные ключи для извлечения
    st.subheader("🔑 Ключи для извлечения данных")
    
    # Основные ключи
    include_basic_keys = st.checkbox("Основные данные", value=True, key="statuses_basic_keys")
    include_readiness_keys = st.checkbox("Готовность к КР", value=True, key="statuses_readiness_keys")
    include_contract_keys = st.checkbox("Заключение договоров", value=True, key="statuses_contract_keys")
    include_supply_keys = st.checkbox("Поставка МТР", value=True, key="statuses_supply_keys")
    
    # Формируем ключи на основе выбора
    keys = []
    if include_basic_keys:
        keys.append(["Дата начала ремонта"])
        keys.append(["Отставание / опережение подготовки к КР", "Отставание / опережение"])
        keys.append(["Отставание / опережение подготовки к КР", "Динамика за прошедшую неделю"])
    
    if include_readiness_keys:
        keys.append(["Готовность к КР", "Факт"])
    
    if include_contract_keys:
        keys.append(["Заключение договоров на СМР", "Договор", "%"])
    
    if include_supply_keys:
        keys.append(["Поставка МТР", "На складе, позиций", "%"])
    
    # Кнопка получения данных
    if st.button("📊 Получить данные", key="statuses_repair_ca_get_data_btn"):
        if not keys:
            st.warning("⚠️ Выберите хотя бы одну группу ключей для извлечения")
        else:
            with st.spinner("Получаем данные..."):
                request_data = {
                    "ids": og_ids if og_ids else None,
                    "keys": keys
                }
                
                result, status_code = make_api_request("/statuses_repair_ca/get_data", request_data)
                
                if status_code == 200 and result.get("success"):
                    st.success("✅ Данные успешно получены!")
                    
                    data = result.get("data", {}).get("value", [])
                    if data:
                        # Отображаем данные в виде таблицы
                        if isinstance(data, list) and len(data) > 0:
                            # Преобразуем в DataFrame для лучшего отображения
                            df_data = []
                            for item in data:
                                row = {
                                    "ID": item.get("id", ""),
                                    "Название": item.get("name", ""),
                                }
                                
                                # Добавляем основные поля
                                if "Дата начала ремонта" in item:
                                    row["Дата начала ремонта"] = item["Дата начала ремонта"]
                                
                                # Добавляем готовность к КР
                                if "Готовность к КР" in item:
                                    readiness = item["Готовность к КР"]
                                    if isinstance(readiness, dict) and "Факт" in readiness:
                                        row["Готовность к КР (Факт)"] = readiness["Факт"]
                                
                                # Добавляем отставание/опережение
                                if "Отставание / опережение подготовки к КР" in item:
                                    delay = item["Отставание / опережение подготовки к КР"]
                                    if isinstance(delay, dict):
                                        if "Отставание / опережение" in delay:
                                            row["Отставание/опережение"] = delay["Отставание / опережение"]
                                        if "Динамика за прошедшую неделю" in delay:
                                            row["Динамика за неделю"] = delay["Динамика за прошедшую неделю"]
                                
                                # Добавляем договоры
                                if "Заключение договоров на СМР" in item:
                                    contracts = item["Заключение договоров на СМР"]
                                    if isinstance(contracts, dict) and "Договор" in contracts:
                                        contract = contracts["Договор"]
                                        if isinstance(contract, dict) and "%" in contract:
                                            row["Договоры (%)"] = contract["%"]
                                
                                # Добавляем поставки МТР
                                if "Поставка МТР" in item:
                                    supply = item["Поставка МТР"]
                                    if isinstance(supply, dict) and "На складе, позиций" in supply:
                                        warehouse = supply["На складе, позиций"]
                                        if isinstance(warehouse, dict) and "%" in warehouse:
                                            row["МТР на складе (%)"] = warehouse["%"]
                                
                                df_data.append(row)
                            
                            if df_data:
                                df = pd.DataFrame(df_data)
                                st.dataframe(df, use_container_width=True)
                            else:
                                st.info("📋 Нет данных для отображения")
                        else:
                            st.json(result)
                    else:
                        st.info("📋 Нет данных для отображения")
                else:
                    st.error(f"❌ Ошибка: {result.get('message', 'Неизвестная ошибка')}")