from fastapi import FastAPI, UploadFile, File
import shutil
import os
import asyncio
from src.main import main as interpret_sequence
from src.config import config

app = FastAPI()

UPLOAD_DIR = config.get("upload_dir", "uploads")
os.makedirs(UPLOAD_DIR, exist_ok=True)

# Очередь выполняющихся задач
background_tasks = {}


@app.post("/interpret/")
async def interpret_sequence_api(file: UploadFile = File(...)):
    """
    Загружает файл .seq и запускает интерпретацию.
    """
    file_path = os.path.join(UPLOAD_DIR, file.filename)

    # Сохранение загруженного файла
    with open(file_path, "wb") as buffer:
        shutil.copyfileobj(file.file, buffer)

    task_id = file.filename  # ID задачи - имя файла
    background_tasks[task_id] = "Processing"

    # Асинхронно запускаем интерпретацию
    try:
        await interpret_sequence(sequence_path=file_path, output_dir=config.get("output_dir"))
        background_tasks[task_id] = "Completed"
    except Exception as e:
        background_tasks[task_id] = f"Failed: {str(e)}"

    return {"status": "success", "task_id": task_id, "message": f"Файл {file.filename} обработан."}


@app.get("/status/")
async def get_status():
    """
    Возвращает статус всех выполняющихся задач.
    """
    return {"tasks": background_tasks}
