import streamlit as st
import os
import json
from streamlit_quill import st_quill

def run(plugin_info):
    st.markdown("### 🛠 Конструктор инструкций")
    
    with st.container(border=True):
        inst_id = st.text_input("Внутреннее имя (на английском, без пробелов, например 'printer_setup')")
        title = st.text_input("Отображаемое название (например 'Как настроить принтер')")
        desc = st.text_input("Краткое описание")
        icon = st.text_input("Эмодзи для иконки (например 🖨️)", value="📖")
    
    st.markdown("#### Текст инструкции (Шаг 1)")
    # Визуальный редактор, как в Word!
    content = st_quill(placeholder="Пишите инструкцию здесь...")
    
    uploaded_image = st.file_uploader("Прикрепить скриншот", type=["png", "jpg", "jpeg"])
    
    if st.button("🚀 Опубликовать", type="primary"):
        if not inst_id or not title:
            st.error("Заполните Внутреннее имя и Название!")
            return
            
        # Папка будет создана там же, где находится сам конструктор (в instructions)
        parent_dir = plugin_info["parent_section"]
        new_folder_path = os.path.join("CorpHub", parent_dir, inst_id)
        
        if os.path.exists(new_folder_path):
            st.error("Инструкция с таким внутренним именем уже существует!")
            return
            
        os.makedirs(new_folder_path)
        
        # Сохраняем картинку, если она есть
        image_name = None
        if uploaded_image:
            image_name = uploaded_image.name
            with open(os.path.join(new_folder_path, image_name), "wb") as f:
                f.write(uploaded_image.getbuffer())
                
        # Формируем JSON-скелет новой карточки
        new_info = {
            "title": title,
            "description": desc,
            "icon": icon,
            "category": "instruction"
        }
        
        # Если есть картинка - формируем красивый блок
        if image_name:
            new_info["block_1"] = {
                "text": content,
                "big_image": image_name
            }
        else:
            new_info["block_1"] = content
            
        # Сохраняем JSON на диск
        with open(os.path.join(new_folder_path, "info.json"), "w", encoding="utf-8") as f:
            json.dump(new_info, f, ensure_ascii=False, indent=2)
            
        st.success("✅ Инструкция успешно опубликована! Вернитесь на главную страницу.")