import os
import requests
import json

# Адрес вашего сервера с поднятым Docker-контейнером Unstructured
API_URL = "http://172.16.80.250:9000/general/v0/general"

def main():
    # 1. Ищем все файлы .pdf и .docx в текущей директории
    target_files = [f for f in os.listdir('.') if f.lower().endswith(('.pdf', '.docx'))]
    target_files.sort() # Для порядка
    
    if not target_files:
        print("❌ В текущей папке не найдено ни одного PDF или DOCX файла.")
        return

    print(f"📂 Найдено файлов для обработки: {len(target_files)}")

    # 2. Проходимся по всем найденным файлам
    for target_file in target_files:
        print(f"\n📄 Обрабатывается файл: {target_file}")
        print(f"⏳ Отправляем на сервер {API_URL}... (это может занять время)")

        # Настройки запроса (параметры PDF просто игнорируются сервером для DOCX)
        payload_data = {
            "strategy": "hi_res",       
            "languages": ["rus"],       
            "pdf_infer_table_structure": "true" 
        }

        # Определяем правильный MIME-тип для файла
        ext = target_file.lower().split('.')[-1]
        if ext == 'pdf':
            mime_type = "application/pdf"
        else:
            mime_type = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"

        # 3. Открываем файл и делаем POST-запрос
        try:
            with open(target_file, "rb") as f:
                files = {
                    "files": (target_file, f, mime_type)
                }
                
                # Таймаут 300 секунд
                response = requests.post(API_URL, files=files, data=payload_data, timeout=300)
                response.raise_for_status()
                
                # 4. Получаем JSON и сохраняем его в файл
                parsed_data = response.json()
                output_filename = f"{os.path.splitext(target_file)[0]}_parsed.json"
                
                with open(output_filename, "w", encoding="utf-8") as out_f:
                    json.dump(parsed_data, out_f, ensure_ascii=False, indent=4)
                    
                print(f"✅ Готово! Результат успешно сохранен в файл: {output_filename}")

        except requests.exceptions.ConnectionError:
            print(f"❌ Ошибка соединения! Проверьте доступность {API_URL}")
        except requests.exceptions.Timeout:
            print("❌ Сервер слишком долго не отвечал.")
        except requests.exceptions.HTTPError as e:
            print(f"❌ Сервер вернул ошибку: {e}")
            if response.text:
                print(f"Детали ошибки от сервера: {response.text}")
        except Exception as e:
            print(f"❌ Произошла непредвиденная ошибка при обработке {target_file}: {e}")

if __name__ == "__main__":
    main()