from sqlalchemy import text
from sqlalchemy.ext.asyncio import AsyncSession


async def mark_checked(session: AsyncSession, company_ids: list[str]) -> int:
    """Regista que um scraper passou por estas empresas, **mesmo sem achar nada**.

    Sem isto, uma empresa limpa é indistinguível de uma empresa que nunca foi
    procurada: as duas ficavam com `data_coverage_end` a nulo e a ficha dizia
    "sem dados" nos dois casos. Dos 87 clientes, 73 não têm processo nenhum — o
    que é boa notícia e estava a ser apresentado como ausência de informação.

    Só mexe no `data_coverage_end`; o `start` continua a sair do primeiro
    processo, porque é isso que ele quer dizer.
    """
    if not company_ids:
        return 0
    result = await session.execute(
        text(
            "UPDATE companies SET data_coverage_end = now()"
            " WHERE id = ANY(CAST(:ids AS UUID[]))"
        ),
        {"ids": company_ids},
    )
    return result.rowcount or 0


async def update_coverage(session: AsyncSession, company_id: str) -> None:
    """Recompute data_coverage_start/end for a company.

    start = MIN(first_seen_at) across its processes
    end   = now() (or the timestamp of this scrape — here we just use now())
    """
    await session.execute(
        text(
            """
            UPDATE companies SET
              data_coverage_start = (
                SELECT MIN(first_seen_at) FROM processes WHERE company_id = :cid
              ),
              data_coverage_end = now()
            WHERE id = :cid
            """
        ),
        {"cid": company_id},
    )
