﻿import streamlit as st
import pandas as pd
import random
import io
import base64
import streamlit.components.v1 as components

# Пул случайных пожеланий
WISHES = [
    "Хорошего дня и отличного настроения!",
    "Пусть этот день принесет только радость!",
    "Удачного дня и легких задач!",
    "Улыбнись, сегодня твой день!",
    "Пусть все задуманное получится легко!",
    "Продуктивного рабочего дня!",
    "Отличного дня, полного маленьких побед!",
    "Желаю море вдохновения на сегодня!",
    "Пусть день пройдет гладко и быстро!",
    "Успехов во всех сегодняшних делах!"
]

def run(plugin_info):
    st.title(f"{plugin_info.get('icon', '')} {plugin_info.get('title', 'Демо-помощник')}")
    st.info(plugin_info.get("full_description", ""))

    uploaded_files = st.file_uploader("Загрузите файлы Excel (.xlsx)", type=['xlsx'], accept_multiple_files=True)
    valid_files = []

    if uploaded_files:
        st.write("---")
        st.write("### 🔍 Проверка файлов:")
        
        # 1. Проверяем файлы сразу при загрузке
        for file in uploaded_files:
            try:
                df = pd.read_excel(file)

                if df.empty or len(df.columns) == 0:
                    st.error(f"❌ Файл **{file.name}** пустой или не содержит колонок.")
                    continue

                # Убираем .0 и проверяем на 5 цифр
                first_col = df.iloc[:, 0].astype(str).str.replace(r'\.0$', '', regex=True)
                if not first_col.str.match(r'^\d{5}$').all():
                    col_name = df.columns[0]
                    st.error(f"❌ Файл **{file.name} отклонен**: в первой колонке («{col_name}») значения не состоят ровно из 5 цифр.")
                else:
                    st.success(f"✅ Файл **{file.name}** успешно прошёл проверку.")
                    valid_files.append(file)

            except Exception as e:
                st.error(f"❌ Ошибка чтения файла **{file.name}**: {e}")

        # 2. Если есть корректные файлы - показываем кнопку запуска
        if valid_files:
            st.write("")
            if st.button("🚀 Обработать и скачать всё", type="primary"):
                
                progress_bar = st.progress(0, text="Начинаем обработку...")
                ready_files = [] # Список для готовых файлов в памяти

                for i, file in enumerate(valid_files):
                    progress_bar.progress(i / len(valid_files), text=f"Обработка: {file.name}")
                    
                    df = pd.read_excel(file)
                    
                    # Добавляем пожелание
                    wish = random.choice(WISHES)
                    new_row = {col: "" for col in df.columns}
                    if len(df.columns) > 0:
                        new_row[df.columns[0]] = wish

                    df = pd.concat([df, pd.DataFrame([new_row])], ignore_index=True)

                    # Сохраняем в виртуальный файл
                    output = io.BytesIO()
                    with pd.ExcelWriter(output, engine='openpyxl') as writer:
                        df.to_excel(writer, index=False)

                    ready_files.append({
                        "name": f"ready_{file.name}",
                        "data": output.getvalue()
                    })
                
                progress_bar.progress(100, text="Формируем скачивание...")

                # 3. МАГИЯ АВТОСКАЧИВАНИЯ ПО ОЧЕРЕДИ
                js_code = "<script>"
                for idx, item in enumerate(ready_files):
                    # Кодируем Excel файл в base64
                    b64_data = base64.b64encode(item["data"]).decode()
                    filename = item["name"]
                    
                    # Правильный тип файла для браузера (Excel .xlsx)
                    mime_type = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
                    
                    # Задержка: 500мс для первого, 1000мс для второго и т.д.
                    delay = (idx + 1) * 500 
                    
                    js_code += f"""
                    setTimeout(function() {{
                        var element = document.createElement('a');
                        element.setAttribute('href', 'data:{mime_type};base64,{b64_data}');
                        element.setAttribute('download', '{filename}');
                        element.style.display = 'none';
                        document.body.appendChild(element);
                        element.click();
                        document.body.removeChild(element);
                    }}, {delay});
                    """
                js_code += "</script>"
                
                # Внедряем невидимый HTML/JS код в страницу
                components.html(js_code, height=0)
                
                st.success(f"✨ {len(ready_files)} файлов успешно обработано! Загрузка началась автоматически. Проверьте папку «Загрузки» в браузере.")