"""ARQ worker settings and jobs."""

from __future__ import annotations

import uuid

import structlog

from packages.db.session import get_session_factory, init_db
from packages.integrations.queue import redis_settings
from packages.orchestrator.graph import Orchestrator

logger = structlog.get_logger(__name__)


async def startup(ctx: dict) -> None:
    from packages.config import get_settings

    settings = get_settings()
    await init_db()
    logger.info(
        "worker_started",
        jira_provider=settings.jira_provider,
        llm_provider=settings.llm_provider,
        app_env=settings.app_env,
    )


async def process_run(ctx: dict, run_id: str, resume: bool = False) -> dict:
    factory = get_session_factory()
    async with factory() as session:
        orch = Orchestrator(session)
        run = await orch.run(uuid.UUID(run_id), resume=resume)
        logger.info("run_processed", run_id=run_id, state=run.state.value)
        return {"run_id": run_id, "state": run.state.value}


class WorkerSettings:
    functions = [process_run]
    on_startup = startup
    redis_settings = redis_settings()
