"""
brain/ingest.py — Thought ingestion pipeline.

Runs embedding generation and metadata extraction in parallel, then stores
both in PostgreSQL. Returns the stored thought ID and a human-readable
confirmation string suitable for sending back via Telegram.
"""
from __future__ import annotations

import asyncio
import logging

logger = logging.getLogger(__name__)


async def ingest_thought(content: str, user_id: str | None = None) -> dict:
    """
    Full ingestion pipeline for one thought:
      1. Generate embedding + extract metadata (parallel)
      2. Store in PostgreSQL
      3. Return {id, metadata, confirmation}

    Raises RuntimeError if Brain DB is not available.
    """
    from .embeddings import get_embedding
    from .metadata import extract_metadata
    from .database import insert_thought

    # Run embedding and metadata extraction in parallel
    embedding, metadata = await asyncio.gather(
        get_embedding(content),
        extract_metadata(content),
    )

    thought_id = await insert_thought(content, embedding, metadata, user_id=user_id)

    # Build a human-readable confirmation (like the Slack bot reply in the guide)
    thought_type = metadata.get("type", "other")
    tags = metadata.get("tags", [])
    people = metadata.get("people", [])
    actions = metadata.get("action_items", [])

    lines = [f"✅ Captured as {thought_type}"]
    if tags:
        lines[0] += f" — {', '.join(tags)}"
    if people:
        lines.append(f"People: {', '.join(people)}")
    if actions:
        lines.append("Actions: " + "; ".join(actions))

    return {
        "id": thought_id,
        "metadata": metadata,
        "confirmation": "\n".join(lines),
    }
