"""Trash MCP tools — unified, batch-based recovery surface.

Deletes go through the per-type delete_* tools (which soft-delete via the trash
service). These tools list / restore / permanently-purge trashed content by
the deleted_batch_id that a delete operation returns.
"""
from __future__ import annotations

from scribe.mcp._context import current_user_id
from scribe.services import trash as trash_svc


async def list_trash() -> dict:
    """List trashed items, grouped by the deletion batch they were removed in.

    Each batch has: batch_id, deleted_at, a summary (the lead item's title),
    count, and the member items (type + id + title). Restore a batch with
    restore(deleted_batch_id).
    """
    return {"batches": await trash_svc.list_trash(current_user_id())}


async def restore(deleted_batch_id: str) -> dict:
    """Restore a whole deletion batch from the trash (un-delete)."""
    n = await trash_svc.restore(current_user_id(), deleted_batch_id)
    return {"restored": n, "batch_id": deleted_batch_id}


async def purge_trash(deleted_batch_id: str, confirmed: bool = False) -> dict:
    """Permanently delete a trashed batch. IRREVERSIBLE — pass confirmed=True.

    This is the only true hard-delete tool; everything else is recoverable.
    """
    if not confirmed:
        return {
            "warning": (
                f"Permanently delete batch {deleted_batch_id}? This cannot be "
                f"undone. Pass confirmed=True to proceed."
            ),
            "confirmed_required": True,
        }
    n = await trash_svc.purge(current_user_id(), deleted_batch_id)
    return {"purged": n, "batch_id": deleted_batch_id}


def register(mcp) -> None:
    for fn in (list_trash, restore, purge_trash):
        mcp.tool(name=fn.__name__)(fn)
