"""Run long blog generation in detached subprocesses (non-blocking)."""

import logging
import os
import subprocess
import sys
from pathlib import Path

from django.conf import settings

logger = logging.getLogger(__name__)


def _logs_dir():
    path = Path(settings.BASE_DIR) / "logs"
    path.mkdir(parents=True, exist_ok=True)
    return path


def _spawn_manage_command(command, article_id, label):
    manage_py = Path(settings.BASE_DIR) / "manage.py"
    log_path = _logs_dir() / f"blog_article_{article_id}.log"
    cmd = [sys.executable, str(manage_py), command, str(article_id)]
    log_file = open(log_path, "a", encoding="utf-8")
    log_file.write(f"\n--- {label} article={article_id} ---\n")
    log_file.flush()
    proc = subprocess.Popen(
        cmd,
        stdout=log_file,
        stderr=subprocess.STDOUT,
        start_new_session=True,
        cwd=str(settings.BASE_DIR),
        env=os.environ.copy(),
    )
    logger.info(
        "blog worker enqueued %s article_id=%s pid=%s log=%s",
        label,
        article_id,
        proc.pid,
        log_path,
    )
    return proc.pid


def enqueue_process_article(article_id):
    """Generate content/images only (legacy). Prefer enqueue_process_and_publish_article."""
    return _spawn_manage_command("process_blog_article", article_id, "generate")


def enqueue_process_and_publish_article(article_id):
    """Generate and publish on scheduled day (non-blocking)."""
    return _spawn_manage_command(
        "process_and_publish_blog_article", article_id, "generate+publish"
    )
