"""
Страница управления задачами загрузки
"""
import streamlit as st
from datetime import datetime
import time
from async_upload_page import TASKS_STORAGE


def render_tasks_page():
    """Рендер страницы управления задачами"""
    st.title("📋 Управление задачами загрузки")
    st.markdown("---")
    
    # Кнопки управления
    col1, col2, col3, col4 = st.columns([1, 1, 1, 2])
    
    with col1:
        if st.button("🔄 Обновить", key="refresh_tasks_btn", use_container_width=True):
            st.rerun()
    
    with col2:
        if st.button("🗑️ Очистить завершенные", key="clear_completed_btn", use_container_width=True):
            # Удаляем завершенные и неудачные задачи
            tasks_to_remove = []
            for task_id, task in TASKS_STORAGE.items():
                if task.get('status') in ['completed', 'failed']:
                    tasks_to_remove.append(task_id)
            
            for task_id in tasks_to_remove:
                del TASKS_STORAGE[task_id]
            
            st.success(f"✅ Удалено {len(tasks_to_remove)} завершенных задач")
            st.rerun()
    
    with col3:
        auto_refresh = st.checkbox("🔄 Автообновление", key="auto_refresh_checkbox")
        if auto_refresh:
            time.sleep(2)
            st.rerun()
    
    with col4:
        st.caption("Последнее обновление: " + datetime.now().strftime("%H:%M:%S"))
    
    st.markdown("---")
    
    # Статистика задач
    st.subheader("📊 Статистика задач")
    
    # Получаем задачи из глобального хранилища
    tasks = TASKS_STORAGE
    
    # Подсчитываем статистику
    total_tasks = len(tasks)
    pending_tasks = len([t for t in tasks.values() if t.get('status') == 'pending'])
    running_tasks = len([t for t in tasks.values() if t.get('status') == 'running'])
    completed_tasks = len([t for t in tasks.values() if t.get('status') == 'completed'])
    failed_tasks = len([t for t in tasks.values() if t.get('status') == 'failed'])
    
    col1, col2, col3, col4, col5 = st.columns(5)
    
    with col1:
        st.metric("Всего", total_tasks, f"+{total_tasks}")
    
    with col2:
        st.metric("Ожидают", pending_tasks, f"+{pending_tasks}")
    
    with col3:
        st.metric("Выполняются", running_tasks, f"+{running_tasks}")
    
    with col4:
        st.metric("Завершены", completed_tasks, f"+{completed_tasks}")
    
    with col5:
        st.metric("Ошибки", failed_tasks, f"+{failed_tasks}")
    
    st.markdown("---")
    
    # Список задач
    st.subheader("📋 Список задач")
    
    # Получаем задачи из глобального хранилища
    tasks = TASKS_STORAGE
    
    if tasks:
        # Показываем задачи
        for task_id, task in tasks.items():
            status_emoji = {
                'pending': '🟡',
                'running': '🔵', 
                'completed': '🟢',
                'failed': '🔴'
            }.get(task.get('status', 'pending'), '⚪')
            
            with st.expander(f"{status_emoji} {task.get('filename', 'Unknown')} - {task.get('status', 'unknown').upper()}", expanded=True):
                col1, col2 = st.columns([3, 1])
                
                with col1:
                    st.write(f"**ID:** `{task_id}`")
                    st.write(f"**Статус:** {status_emoji} {task.get('status', 'unknown').upper()}")
                    st.write(f"**Файл:** {task.get('filename', 'Unknown')}")
                    st.write(f"**Эндпоинт:** {task.get('endpoint', 'Unknown')}")
                    
                    # Показываем прогресс для выполняющихся задач
                    if task.get('status') == 'running':
                        progress = task.get('progress', 0)
                        st.write(f"**Прогресс:** {progress}%")
                        st.progress(progress / 100)
                    
                    # Показываем время выполнения
                    if task.get('started_at'):
                        started_time = datetime.fromtimestamp(task['started_at']).strftime("%Y-%m-%d %H:%M:%S")
                        st.write(f"**Начата:** {started_time}")
                    
                    if task.get('completed_at'):
                        completed_time = datetime.fromtimestamp(task['completed_at']).strftime("%Y-%m-%d %H:%M:%S")
                        st.write(f"**Завершена:** {completed_time}")
                        
                        # Показываем длительность
                        if task.get('started_at'):
                            duration = task['completed_at'] - task['started_at']
                            st.write(f"**Длительность:** {duration:.1f} сек")
                    
                    if task.get('result'):
                        result = task['result']
                        if task.get('status') == 'completed':
                            st.success(f"✅ {result.get('message', 'Задача выполнена')}")
                            if result.get('object_id'):
                                st.info(f"ID объекта: {result['object_id']}")
                        else:
                            st.error(f"❌ {result.get('message', 'Ошибка выполнения')}")
                    
                    if task.get('error'):
                        st.error(f"❌ Ошибка: {task['error']}")
                
                with col2:
                    if task.get('status') in ['pending', 'running']:
                        if st.button("❌ Отменить", key=f"cancel_{task_id}_btn", use_container_width=True):
                            st.info("Функция отмены будет реализована в следующих версиях")
                    else:
                        if st.button("🗑️ Удалить", key=f"delete_{task_id}_btn", use_container_width=True):
                            # Удаляем задачу из глобального хранилища
                            if task_id in TASKS_STORAGE:
                                del TASKS_STORAGE[task_id]
                            st.rerun()
    else:
        # Пустое состояние
        st.info("""
        **Нет активных задач**
        
        Загрузите файл на странице "Асинхронная загрузка", чтобы создать новую задачу.
        Здесь вы сможете отслеживать прогресс обработки и управлять задачами.
        """)
        
        # Кнопка для создания тестовой задачи
        if st.button("🧪 Создать тестовую задачу", key="create_test_task_btn"):
            test_task_id = f"test_task_{int(time.time())}"
            
            TASKS_STORAGE[test_task_id] = {
                'status': 'completed',
                'filename': 'test_file.zip',
                'endpoint': '/test/upload',
                'result': {'message': 'Тестовая задача выполнена', 'object_id': 'test-123'},
                'started_at': time.time() - 5,  # 5 секунд назад
                'completed_at': time.time(),
                'progress': 100
            }
            st.rerun()
    
    st.markdown("---")
    
    # Информация о статусах задач
    with st.expander("ℹ️ Статусы задач"):
        st.markdown("""
        **Статусы задач:**
        - 🟡 **Ожидает** - задача создана и ожидает выполнения
        - 🔵 **Выполняется** - задача обрабатывается
        - 🟢 **Завершена** - задача успешно выполнена
        - 🔴 **Ошибка** - произошла ошибка при выполнении
        - ⚫ **Отменена** - задача была отменена пользователем
        
        **Действия:**
        - ❌ **Отменить** - отменить выполнение задачи
        - 🔄 **Обновить** - обновить статус задачи
        - 📊 **Детали** - просмотреть подробную информацию
        """)