import os
from celery import Celery
from typing import List, Dict, Optional
from dependencies.StormRunner import StormRunner
import db_config.database as dbase
from db_config.models import Courses
from sqlalchemy.orm import Session
APP_URL = os.getenv("APP_URL")
celery_app = Celery(
    "tasks",
    broker="redis://localhost:6379/0",  # Redis as message broker
    backend="redis://localhost:6379/0"
)

@celery_app.task
def process_article_celery(
    topic: str,
    course_id: str
) -> str:
    db: Session = dbase.SessionLocal()
    try:
        # Initialize HybridSearch
        runner = StormRunner(topic)
        
        # Process the document
        result = runner.process_article()
        # Fetch document from DB
        course = db.query(Courses).filter(Courses.course_id == course_id).first()
        download_link = f"{APP_URL}/download-imscc?topic={topic}"
        if course:
            course.course_imscc_url = download_link
            course.status = "Ready"
            db.commit()
            db.refresh(course)
        else:
            return f"Course with Course ID {course_id} not found."

    except Exception as e:
        db.rollback()  # Rollback in case of an error
        return f"Error processing Course: {str(e)}"

    finally:
        db.close()  # Ensure the session is closed properly

    return "Course processed successfully."